change default from np.median to np.ma.median
Added option to use representation names in represent_as
Added test for represent_as
Replace class attribute frame_attr_names with descriptors
Update docs
Add unit tests of FrameAttribute descriptor
Put FrameAttribute into public coords API so it shows up in docs
Restore proper inheritance of frame attributes via __mro__
Change frame_attr_names() to get_frame_attr_names()
Add coveralls --rcfile option
First pass at "model sets" implementation.  This gets all the existing
tests working.  Some tests had to be updated to *explicitly* set
model_set_axis=0.  This is because they used model types that previously
set their param_dim implicitly from the shape of the first
parameter--the type of ambiguous implicit action we're trying to get
away from.

As a result I believe there were some tests that intended to test single
models (i.e. param_dim=1) with array-valued parameters, but didn't
actually do this.

As such, array-valued parameters are not yet working quite properly, but
that will come in the next changeset.

Another annoyance with this so far is that in order to use
model_set_axis to specify the set size it is *necessary* to provide a
value for at least one parameter.  This seems arbitrary and awkward for
models that have default values for all their parameters.  It should be
possible to initialize those without providing any parameter values.

For that reason it might be worth introducing an n_models argument with
the same semantics and param_dim (some people in previous discussions
were okay with the name 'n_models').  I'd also consider model_set_size.
model_set_size could work in tandem with model_set_axis and one, the
other, or both could be specified (if both they would obviously have to
agree).
Fix the param_sets property to work somewhat consistently within the new system.  I'm not sure how much longer I want to keep this property around in its present form at all, but for now I tried to manimize the changes necessary to any other code or tests.  One thing that is slightly different now is that *previously* the last axis of the param_sets array was always the same size as the number of param sets (that is, the last axis was the param set axis).  Now that is no longer guaranteed--instead it corresponds to whatever axis was specified by model_set_axis.  We could roll that axis to the end, but for now I prefer preserving the contiguity of each parameter array).
Re-introduced an n_models argument analogous to the old param_dim argument (with backwards compatibility support for param_dim).  This was necessary in cases where no initial values are provided for any parameters (all parameters have default values), and is also simply clearer in other cases.  The model_set_axis argument is still needed in addition to this to meet all use cases.  However, when n_models > 1, model_set_axis defaults to zero unless otherwise specified.  Setting model_set_axis=False disables it entirely.
WIP: A lot of work to make sure that array-valued parameters (with or without multiple parameter sets) can broadcast with each other in a logical way).
This should just raise an AttributeError, since __getattr__ is not defined on the base class.
Just a bit of trivial formatting fixup in this module--several of these tests are failing, for now
What is logic?  Actually, no, I don't know where I got the idea that if all arrays broadcast with one array then they all mutually broadcast.  We actually have to check all shapes against each other to ensure broadcastability.  Fortunately this can be done fairly easily on the order of the number of params * the max param dimension.  In fixing this I think I significantly simplified the logic in _check_param_broadcast so that it's a good deal more coherent.
A more useful implementation of check_broadcast--instead it now raises an exception if any of the shapes are incompatible (which is fine since this is always an error situation anyways) and if the check succeeds it will return the full shape of all the arrays broadcast with each other.
Some major progress on getting all the possible input/parameter combinations working properly.  There are still more cases that need to be tested, and the code is unfortunately very complicated and confusing.  I think it can probably be made simpler by breaking it into a few different subroutines for different cases, rather than handling all possible cases in the same loop.
Go ahead and make a special case for scalar inputs--they are allowed even when n_models > 1 since the intent is fairly unambiguous and they are always broadcastable.