Split drivers into individual classes

By way of a point of discussion, I've broken out individual drivers into their own classes. This cleans up a lot of pretty epic switches, but I've mostly done it so I can eventually add ohai hints into the correct classes automatically. 
This commit also adds a very tiny amount of rspec.
To avoid duplication of the _init, it's probably worth adding a provider_class_for(provider) method.