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 want to manage all dependencies so I know they are all at the same version.
Yes I set puppet_version to to upgrades of puppet with puppet.
I also do the same with a lot of other things like apache, php, ssl and a few others.
That way I can push out security patches with puppet.
It might be insane but it's been working for me rather well.