The Proposed Coordinates API

This PR will contain all work on the coordinates API. The API tests are in a separate PR, and regular tests pertaining to various classes in the coordinates framework will be introduced in this PR.
Comments are very much appreciated!
this is `d = np.sqrt(x**2 + y**2 + ((helioccoord.D0.to(u.m) - z)**2)` in equation 16 in Thompson, is there a reason it is the other way around here?