(PUP-2757) Force agent to use a remote 'reference' environment

Puppet application setup, shared by master, agent, apply and others,
would make use of a 'remote' environment (an environment object with nil
modulepath/manifest intended as a reference to the environment on a
master with content dictated by the master), but only when unable to
generate or locate the configured environment.

This commit rearranges the environment setup order slightly to better
ensure that an agent always initializes with a 'remote'
current_environment, unless the user has specifically overridden
--modulepath or --manifest for some painful and obscure reason.

During the Configurer run, we push the final remote environment onto the
context based on what the master has told us in the returned node.

The reason for all of these is so that an environment configured for a
local puppet apply does not taint what gets used during an agent/master
run.