Support running Puppet masters from raw gems rather than apt packages.

Ok guys, this is a total work in progress... I'll likely make 30 more commits before its ready, so don't treat this as a merge-able PR. Instead, I'm looking for your feedback on my re-structuring of the classes into parameterized classes. I strongly suggest this model because its far more easily unit testable (see how much simpler the unit tests get). Additionally, it makes things a bit more explicit (rather than doing class-to-class private variable sharing, which is pretty dangerous).
I believe your concern here is that if somebody instantiates a subclass on their own (like `::master::module` or `::master::puppetdb`) that the modules would pull settings directly from the `::master::env` class, rather than from the `::master` class, causing some funky behavior. I can see that and see how with those two subclasses we might want to subclass from `::master`.

However, the rest of the subclasses that are all instantiated by the `::master` class (`::master::install`, `::master::config`, `::master::hiera`, `::master::ssl`, `::master::passenter`), I disagree with the concern. These classes are all instantiated BY the `::master` class. The only reason they're parameterized at all is for ease of testing and clarity in the code (the `::master` class is far easier to read now, IMO). These subclasses are never instantiated by a user directly -- but even if they are `include`d by a user directly, they're already setup by the `::master` class, so puppet never re-instantiates them anyways.