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.
Re `provider_init` rather than `providers` - I thought about that, but I'm not sure it actually reflects what's going on; the driver_init stuff is just sticking the class name into the list of available classes, whereas the providers are actually doing the work too. Separating the initialization from the provider didn't seem valuable either, I think