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
Ah, I just missed the `wcs.sub` call above.  In that case, I think this is fine.