Proof of concept for dynamic preferred representation
Allow attribute access for preferred representation attributes
Make preferred attributes dynamic by not creating properties in MetaFrame
Make sky coord units handling somewhat less spherical-centric
Add _attr_classes to Representations to indicate class types
More units generalization
First cut at generalizing SkyCoord inputs for other representations
Allow for initialization from non-default repr coord or frame instance
Generalize positional args
Fix test regressions
Add UnitSphericalRepresentation to _representations
Generalize input as BaseRepresentation case
Change from preferred_representation to representation
Make representation._attr_classes be OrderedDict
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