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).
Hrmm.. I've never read that part of the style guide exactly that way. The way I read it is that resource compression, with non-related resources, is bad. However using it with related-resources (like a list of packages) is totally reasonable.

I can split these up if you really want, but since all 4 of these packages need to be installed anyways, and they're listed in the correct order (and have their dependencies managed properly), that it looked reasonable to have the code compressed a bit. Just seems easier to read IMO.