Change spherical<->cartesian conversions to a representation-based implementation

This is a a way to close #2988 by making the `spherical_to_cartesian` and `cartesian_to_spherical` long-lived "convinience functions" instead of deprecating them.  In the process it also changes them to use the representation classes as the implementation.  See the discussion in #2988 for more on this.