(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.
Aha! It isn't new :) You're having the same problem that I had when I created the bug. The `env ||=` used to be part of the conditional for the `if` and so the `env.nil?` case would have gone to the `else` clause of the outer `if` before my change from `get()` to `get!()`. This makes that behavior much more apparent.