[WIP]: SunPy Coordinates

This is a replacement to #1069 rebased and ready for some work!

TODO List:
* [ ] Rigorously compare and eliminate any dependencies between this implementation and the current implementation in `sunpy.wcs`.
* [ ]  Rewrite the implementation of `HelioProjectiveFrame` to not convert up to 3D unless explicitly requested by the user, or upon transformation to `HelioCentric`.
     * [ ] Give `HelioProjective` a RSun `FrameAttribute` to use in 2D -> 3D conversion. 
     * [ ] Recode `HelioProjectiveFrame.get_distance_hpc()` so that when the current frame is 2D (`UnitSphericalRepresentation`) it will return a copy of the frame in 3D (`SphericalWrap180Representation`) having used Rsun to do the calculation.
     * [ ] Strip out all the ugly from `__init__` 
* [ ] Increase test coverage of `representation.py`
* [ ] Increase test coverage of `frames.py`
* [ ] Increase test coverage of `frameattributes.py`

cc @Vaticancameos @astrofrog