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).
When you set the `_` internal version with the frame attribute from the user, nothing more gets done (now that the `_convert_to_time` function is no longer being called here).  It's not until you get into the `FrameAttribute.__get__` that the `convert_input` method and all that logic goes into action.  It's a little hacky, but just getting the attribute here was the easiest way I could think of to force an error here in init rather than later the first time the attribute is accessed.