Use descriptors for frame attributes

This changes the primary mechanism for defining frame attributes like equinox or obstime from the `frame_attr_names` class attribute to properties using a `FrameAttribute` class descriptor.

The current implementation has a limitation that the frame attributes are not inherited when subclassing.  Given realistic use cases I don't think this is a big problem but we could always put the MRO searching back in.  (Django has a similar issue for database fields, and they have a limitation that you can only (easily) inherit from specially marked abstract classes).
I'm not sure I get the point of this - what exactly does it validate?