Avoid creating extra project schemas

Voluptuous schema creation is expensive.  A recent change[1] updated
the ProjectParser to create a schema for each project stanza.  This
is because we moved the instantiation of the ProjectParser class to
a point before the pipelines are parsed, and the project schema
requires knowing the pipelines.

Correct this by instantiating the ProjectParser after the pipelines
are set.  With that in place, we can go back to creating only a single
project schema.

While we're at it, update some other classes to use cached schemas as
well for further performance improvements.

[1] 831ff3ebba3932c671f7e67a4ad4ed741b2cd08f

Change-Id: Ied5a1ff4a8717f4fb4fa214af57dbeba21c52afb
2 files changed