Improved the core datatype factory base class and updated MapFactory to use new version.

This PR corrects some complaints about the previous version raised by @segfaulthunter.

The new factory base has done away with the tricky `__new__` manipulation which should make it far more maintainable.  Tests are also added for the new class.  Map factory has been updated to use this new factory.

There should be no changes at the user level, except that sunpy.map.Map is no longer a class, but it is an instance of sunpy.map.MapFactory.  This will allow other MapFactory's to be built and possibly configured differently from the default.

The commit also has a ton of changes due to removing trailing whitespace (sorry!).