Move NDData I/O functions to astropy.io.fits.connect

This makes the following major changes:

* Moves the I/O functions to ``astropy.io.fits.connect`` for consistency with Table (and now split that into ``connect_table`` and ``connect_nddata``
* Makes NDData inherit from ``IOMixin``
* Factor our common code in astropy.io.fits.connect
* Convert header to an ordered dictionary (and remove special FITS keywords) as done for Table

I think ``NDData`` should actually inherit from ``IOMixin`` (as done here) and as a bonus it makes everything a lot simpler for the mix-in class.

If you agree, then merge, otherwise I think we should remove the I/O stuff from https://github.com/astropy/astropy/pull/2905 for now.

Note that the I/O is undergoing a larger scale refactoring so this will change in future anyway, but for now this is the most consistent with what we do for ``Table``.
:+1: