(PUP-1118) Introduce explicit environments

Previously environments were always named, but were never explicitly created
with their modulepath and manifest information. This introduces explicit
environments via Enviroment.create and also replaces all of the uses of
Environment.current with using the new context system, which should allow a
stronger control of what the current environment is.