Seperate frame and data parameters in SkyCoord

This is a pull request to close #2704 in a kind of hacky fashion. `SkyCoord` continues to parse `BaseCoordinateFrame.__repr__`, and the latter needed to be adjusted to seperate the frame and data attributes.

This reminds me of Joshua Bloch's Effective Java section on toString: "Whether or not you specify the format, provide programmatic access to all of the information contained in the value returned by toString. ... If you fail to do this, you *force* programmers who need this information to parse the string. Besides reducing performance and making unnecessary work for programmers, this process is error-prone and results in fragile systems that break if you change the format."

I think that having methods in `BaseCoordinateFrame` to return the `frameattrs` and `data_repr` variables from `__repr__` would be a cleaner way to implement this in `SkyCoord`. If it sounds alright to add these methods to the public API, I can implement that in another pull request and close this one if that approach seems reasonable.