WIP: Generalized WCS -- try #3

This is a work-in-progress to get the generalized WCS stuff serializing to/from ASDF.

All of this is written against embray/astropy@9307fbafe741 (the compound modeling branch).

There's a few things in modeling that I either don't understand or need improvement:

- [ ] Models don't have equality defined, so it doesn't seem to be possible to serialize a model from disk, reload it and compare it against the original.  Is that a hard thing to add?

- [ ] I've had to use some private APIs related to compound models (see `compound.py` below).  Any thoughts about how to provide a public API to what I need?

- [ ] modeling only has an AffineTransformation2D.  What would be involved in making it n-dimensional?  In general, I don't think we should have separate classes for different dimensionality, with the exception of the very-specialized projections (TAN, XPH etc.) where n-dimensionality doesn't make sense.
Like, this is an example of where it will be useful to have some kind of efficient `reduce` implementation for operators with models.  As mentioned in [this comment](https://github.com/spacetelescope/pyasdf/pull/46#issuecomment-60392967) being able to create a compound model directly from a tree will make this more efficient.

Just an implementation detail that wouldn't change much here.  But worth mentioning.