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 agree that it should work that way ... let me take a second stab at this. The problem is that the `::apt` class doesn't allow for overriding of the default class settings from a hiera lookup table. We define `class { '::apt': ... custom params }` class in one place, but Puppet was parsing this class first, causing problems.

I'll take another look though to see if I can work it out. If I can, i'll un-do this .. and add docs to the README for future users of the code.