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).
The super short answer here ... don't test puppet, test your code. I've had this drilled into me by too many other engineers at this point, so I really try to follow the model. The basic idea is that you don't need to test that validate_string() works, you assume it does because someone else has written it and its a well tested module. You don't need to verify that it works.

Instead, writing tests that test your OWN logic code (case statements, variable expansion, if statements) as well as ensuring that your code compiles (the `should compile_with_all_deps` test) are more valuable.

That said, this isn't my module ... so I'm open to doing it differently. Let me finish working on my code changes.. and then I'll re-visit this comment.