Add more concise way of defined represenation attr names and units
Fix SkyCoord and tests to drop preferred_representation
Add SkyCoord representation property
Add in_frame_units kwarg and move unit shifting into frame represent_as()

Two coupled but significant changes. BaseCoordinateFrame.represent_as() is
now capable of returning a representation that has the frame units which
are specified in the representation_attrs[<ReprClass>]['frame_units'] dict.
In other words the returned representation is in the frame units (e.g.
degrees for ra,dec) instead of the native units (e.g. rad for Spherical).
This unit shifting functionality was moved out of __repr__ into
represent_as().

To achieve this a new "in_frame_units" kwarg was added which defaults to
False (reproducing the previous behavior).  Along with that the repr. cache
is now keyed by the tuple (Repr class name, in_frame_units).

This change solves a latent problem that was not apparent previously because
all built-in frames have a default SphericalRepresentation.  If instead you
start from a CartesianRepresentation  there is an issue::

  >>> c = ICRS(x, y, z, representation=CartesianRepresentation)
  >>> c.spherical
  # Output is in radians, not degrees, giving a non-useful view
  # of the spherical representation

With this commit the `spherical` property calls represent_as with
in_frame_units=True and the desired units of degrees are returned.
Fix test to use new way of specify no frame units
Fix docs to pass doc tests
Change 'attr_units' and 'attr_names' keys to 'units' and 'names' respectively
Expunge 'preferred' for the most part
Add global registry of representations and default names and units

Each representation is automatically registered when the class
is defined.  That provides a mapping between the alias name and
the class.

Each representation now defines the default names (e.g. ra, dec,
distance) and units (e.g. u.deg, u.deg, None) for that
representation.  These are only used in frames but here seems like
the most logical place to store this information.  Otherwise there
would need to be a secondary data structure, and authors of
new representations would need to have a way to add their frame
to that secondary structure.
Make frame representation_attrs completely dynamic

In order to remove boilerplate code in defining frames, a new
fully dynamic system for getting the representation attribute
names and units (ra, dec, etc) was added.  This relies on

- Global registry of representations (REPRESENTATION_CLASSES)
- _default_names and _default_units therein
- _representation_attrs defined in the frame class

The latter now only has to specify what is different from the
defaults defined in the representations.

With this change now every frame automatically has every representation
available for display or initialization.
Allow for string input of representation
Improve error message for bad representation
Generalize coord init to work for any representation
Refactor coord initialization and _get_represenation_attrs to simplify logic
Update SkyCoord docstring
Update coordinates getting started with section on representations
Remove FK4NoETerms from the list of frames in test_round_tripping()

From the perspective of SkyCoord interface and round-trip testing, FK4 and
FK4NoETerms are identical.  The FK4NoETerms frame is validated elsewhere.  This
reduces test time by almost a factor of 2 (and this is a big component of
overall coordinates test time).
Remove orphaned BaseRepresentation.attr_dict class method
Update representations.rst documentation
Add representation_names to builtin dir behavior