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).
In the long run, we probably want to have this be a template.

We had talked at one point about creating a separate vhost on the puppetmaster which gets routed connections directed towards puppetmaster-debug.$::domain (or some such),  and having that vhost have a highly instrumented instance of the master running. This would facilitate much easier debugging on a node-by-node basis by simply running puppet agent --server puppetmaster-debug with great ease. Having the config.ru templatized would make that eventual plan easier to implement.