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).
There's a lot of what I feel to be legitimate things being tested here that are being removed. validating the values being fed to a class are the proper type is important, and helps to catch typos, and unanticipated behavior. 

I tried to be concise about the specific attributes of the resources being declared that were being evaluated. I feel much of that explicitness is lost.

I'm fairly attached to my style of unit tests, as I feel that it's important to be able to see everything relevant to the test at hand in one file, but am open to being shown the error in my ways. What benefit do you feel like this provides?