Dynamic coordinate preferred representation

This is a way to allow dynamic preferred representation for coordinates (low-level and high-level).  This is a possible way forward for the concerns raised in #2550.

DO NOT MERGE now.

Example:
```
>>> import astropy.units as u
>>> from astropy.coordinates import *
>>> c = ICRS(1*u.deg, 2*u.deg)
>>> c.ra
<Longitude 1.0 deg>
>>> c.preferred_representation = CartesianRepresentation
>>> c
<ICRS Coordinate: x=0.999238614955 , y=0.0174417749028 , z=0.0348994967025 >
>>> c.x
<Quantity 0.9992386149554826>
>>> c.ra  # I don't quite understand why the ra property goes to __getattr__ in this case
ERROR: AttributeError: 'ICRS' object has no attribute 'ra' [astropy.coordinates.baseframe]
Traceback (most recent call last):
  File "<ipython-input-8-37edf1c420ac>", line 1, in <module>
    c.ra
  File "astropy/coordinates/baseframe.py", line 546, in __getattr__
    .format(self.__class__.__name__, attr))
AttributeError: 'ICRS' object has no attribute 'ra'

>>> c.data  # Still Spherical underneath the hood
<UnitSphericalRepresentation lon=1.0 deg, lat=2.0 deg>

>>> sc = SkyCoord(1*u.deg, 2*u.deg)
>>> sc.frame.preferred_representation = CartesianRepresentation
>>> sc
<SkyCoord (NoFrame): x=0.999238614955 , y=0.0174417749028 , z=0.0348994967025 >
>>> sc.x
<Quantity 0.9992386149554826>
```


this is public and hence needs a docstring, right?  I also slightly prefer `get_representation_name`, as a user who does tab-completion on a representation without thinking too hard might think "oh, the name of the object this coordinate is at" rather than "the name of this representation".  But if you think that's too awkward I'm also ok with leaving it.