(PUP-1118) Fetch the environment's manifest & modulepath at init

After trying to get the manifest and modulepath during the
initialization for an environment, it turned out that a lot of other
things depended on a very specific load order. Some of those needed to
change around, others needed to delay executing until later, after
everything had been loaded and initialized (creation of the root
environment was one of these). The reset of the Parser::Functions also
moved so that it doesn't happen until settings have been initialized.
(PUP-1118) Introduce "create" to make specific environments

Environments are more than just a name, they are also a modulepath and a
manifest. This commit makes a "create" method for setting up
environments with specific modulepaths and manifests rather than relying
on the Puppet Settings at the time that methods are called. In order to
control environments for module installation they now take advantage of
this in order to control the modulepath that things will be installed
into.
(PUP-1118) Provide context at initialization for environments

When puppet is initialized it now also sets up a environments service so
that other parts of the code and go about their merry way.

This also changes the handling of component to work the same way as
other types so that an extra, and confusing, require isn't needed.
(Maint) Alias TESTS as TEST

Sometimes we type one, sometimes the other. Just make them aliases.
(PUP-1118) Remove use of Environment.current

One does not simply change the current environment!

This replaces use of Environment.current= and Environment.current with
Puppet::Context.lookup(:current_environment). This uncovered a lot of
assumptions about what the current environment is at various times, such
as during startup before initialization. There is now a "bootstrap"
context that is setup as soon as possible which provides a basic setup,
once initialization occures this is overridden with another context that
is able to do more.
(PUP-1118) Move global context methods to Puppet

This moves the global context handling out of the Puppet::Context class
and onto the Puppet module, which allows Puppet::Context to be a more
generic, overridable context system. It also allows references to
context information to be a little bit shorter.

This doesn't tackle making settings information available in the
context, and so there might be a little confusion between Puppet[] and
Puppet.lookup.
(Maint) Mark new context methods private

Let's keep these private a while longer until they have settled down a
bit more.
(Maint) Unravel require of forge code

This changes it so that the puppet/forge file handles pulling in all of
the forge related code and thereby sidesteps all sorts of load order
issues.
Merge pull request #2271 from zaphod42/feature/master/pup-1118-implement-environment-directory

(PUP-1118) Introduce explicit environments