(#7749) Reduce weird scope cycles when bootstrapping settings
This commit is a first step towards cleaning up the way that settings
are loaded when puppet is bootstrapped.
A major symptom of the old load order was that if you do a 'require "puppet"'
too early in your code, everything will break because the defaults will
be screwed up.
This commit does not represent an ideal (or probably even a 'good') solution,
it just tweaks a few things in order to make a more meaningful cleanup
possible.
Specifically:
- Makes the ":mutable_defaults" class of settings more sticky, so that they are actually used when interpolating settings
- Simplify resolution of run modes for legacy application names; previous implementation required *ALL* available apps to actually be fully parsed and loaded in order to resolve these, and that introduced some challenging bootstrap dependency cycles.