Implementation of wcs_to_celestial_frame

This is an alternative to https://github.com/astropy/astropy/pull/2681 and uses a function-based implementation. We still need to figure out how to make this extensible, but it is a lot cleaner for dealing with the defaults, etc. so far for FITS-WCS.

* [x] extensibility
* [x] unit tests
I'm not a fan of requiring modifying global state that can't be used in a with statement.  We should probably have something like `astropy.units._UnitContext` here, where you can push lists of supported mappings on and off a stack based on context managers.  (It would be nice to generalize what `_UnitContext` does first and reuse it here, but copying and pasting is probably fine for now).  I may take a crack at this...