(PUP-3244) Remove unnecessary Cached.get!

This removes a function that was provided by the super class.
(PUP-3244) Remove redundant methods and refactor.

Before this commit the Puppet::Environments::Cached#get! was not needed
as it was defined in a parent class. Puppet::Environments::Combined#get!
now calls get! in environment objects instead of assuming how get!
should work.

This commit also refactors areas in the code where
Puppet::Environments::EnvironmentNotFound was raised after calling get
in favor of the new get! method.
(PUP-3244) Remove unnecessary Cached.get!

This removes a function that was provided by the super class.
Merge pull request #3179 from ferventcoder/ticket/stable/PUP-3244-enc-cached-get

(PUP-3244) ENC directory environments - Remove unnecessary Cached.get!
Merge pull request #3182 from demophoon/fix/stable/pup-3244

(PUP-3244) ENC ignores missing directory environments
(PUP-3244) Allow autoload to handle missing environment

When a previous commit changed from get() to get!() the agent stopped
being able to use an environment that is available on the master, but
not available locally. I had misread the code and missed a trailing
`&&`. This caused me to think that the environment lookup in this case
was required, where in fact it is still optional.

This changes the structure of the code to make it much clearer that the
environment is optional, changes from get!() to get(), and adds some
tests around these code paths.