WIP: Refactoring NDData

This PR is a companion to astropy/astropy#2855 and also came out of the NDData telecon. The goal is to simplify the base NDData class so that the base class becomes a simple container for data interchange.

The arithmetic methods on the current ``NDData`` are factored out into an ``NDarithmetic`` mixin class. The class ``NDDataArithmetic`` is include as a convenience and works as a replacement for the current ``NDData`` (I've check that the current ccdproc tests pass if I make make one change to the code: subclass from ``NDDataArithmetic`` instead of ``NDData``).

I've also moved the ``NDData`` arithmetic tests into a separate file.

A rendered version of the documentation changes is [here](http://physics.mnstate.edu/craig/astropy/nddata).

Still not done:
- [ ] Remove checks for ``FlagCollection`` shape (should this be done?)
- [ ] Attempt to make ``mask``, ``unit`` point to the ``mask`` of the data (if it has one) instead of separating the mask from the data, and the same for the unit.

@Cadair -- please check to see whether this revision has ``wcs`` working the way you wanted.

cc  @astrofrog  @cdeil @perrygreenfield @crawfordsm @larrybradley @adamginsburg @bsipocz 
At some point I think we're going to have to reconsider how units in NDData are handled or if it's even appropriate for an `NDData` object to have a unit.   If `NDData` is going to be a common data container object it's going to also have to support cases where different axes represented by the array dimensions have different units.  The obvious example is, say, long slit spectra where one axis will have some dimensions either in pixels or in length (depending on how the WCS is used) while another axis will have some spectral unit (possibly also length in the case of wavelength but possibly also frequency, etc.).