(Maint) Remove use of mocking

Using the mocks is not absolutely necessary in this case. It is easy to
construct the certificate and using it makes it a little clearer what
kind of object we are dealing with.
(PUP-672) Add nested context capabilities

A major problem in puppet is keeping track of contextual information.
The Puppet::Indirector::Request attempts to do this, but it isn't able
to pass that information between indirector requests. This adds a
global context system, where once a value is set it cannot be changed,
but a subcontext can be created.
(maint) Log exception using log_exception

The master application was not using Puppet.log_exception to log out any
errors that might occur during --compile. This meant that there was no
backtrace information available to diagnose the problem.
(PUP-672) Add defaults for context lookups

Before it wasn't possible to get a value from the context that might not
have the requested binding. This adds the ability to provide a default
in the case where there is no finding for the name.
(PUP-672) Track trusted information using the context

This pulls apart the indirector request and the trusted information. The
trusted information is stored in the Puppet::Context and overridden by
the remote request handler to allow the injection of various elements of
trusted information. The reason to separate it from the indirector
request is because the indirector requests are hard to control, as they
are contstructed from hashes of information passed around and
manipulated. This should provide a more straightforward mechanism for
managing this kind of "contextual" information.
(PUP-672) Provide certificate extensions as trusted data

This extends the trusted information that is exposed to the system and
manifests to include the certificate extensions that are part of the
certificate provided by the agent. Only the custom extensions that are
part of the puppet extension arc are included.