Fix a bug where if a class isn't found at swizzle time, it actually will ignore the provider.

Previously it would try to swizzle with a nil class.
Do some major refactoring on the class abstractor.

Make it more efficient after comments from Scott Morrison. Also fix what seems to be a deadlock in Mountain Lion.

Add tests for the abstractor to ensure that it works as planned. A little hard to do well, since we don't actually have the Mail environment around, but still worth it. Need to add more tests for ML and Mavs.