(PUP-3244) ENC ignores missing directory environments

When using an ENC, if an environment that didn't exist was defined for a
node puppet would place the node into the production environment instead
of raising an error to alert the user that the environment that had been
requested did not exist.

This commit changes the behavior when an environment is defined in an
ENC but does not actually exist. Instead of placing the node into the
production environment a Puppet::Environments::EnvironmentNotFound error
is raised.
Hmm, well, actually it shouldn't be redeclared for Cached, because Cached < Combined.  As for the Static, Directories, Combined declarations, they could include a module with that get! instead.  I question though, whether that's the right call for Combined.  I think it might be better to do what Combined#get does and let the individual loaders have there say about what a get! means.  The way it currently is changes the behavior around get! for a Legacy loader, for instance.  I know this has already been merged, but Rob's comment caught my attention; I think it's worth a patch.