Fix a minor issue I discovered with class-deprecation.  In short, the new class's __init__ should receive the same treatment __getstate__ and __setstate__ (unfortunately the same really goes for any method that might use super(), which is not addressed here.  But this should be fine for most important cases.
Changelog entry
Alternate fix that works by eschewing subclassing the original class, and instead just tossing it away outright and building a new class.  There are still some obscure cases where this won't work, especially in the case of custom metaclasses.  But those cases can be dealt with if really needed...
Early experiment in giving names to model input/output coordinates, rather than just counts of inputs/outputs.
Break _ModelMeta.__new__ into a few subroutines for readability.  Brings the same code generation used by custom_model to the main Model class itself for __call__ methods.  Now it's generally unnecessary for Model subclasses to redefine __call__ even if they want to update the method signature to reflect the names of their inputs.  That is now automatic.  Also the Model base class no longer makes any assumptions about the number of a model's inputs or outputs.  It assumes no inputs/outputs until otherwise specified in a subclass.
Fix some minor issues with the array-like interface to Parameters that came up, interestingly, when trying to call help() on a model class.
Remove the custom __call__ overrides in these projection classes which are no longer needed due to the automatic code generation in the _ModelMeta metaclass.
Extend the code generation performed in _ModelMeta.__new__ to include generating __init__ methods as well.  This allows still more boilerplate to be removed from most Model subclasses (though it still allows individual subclasses to define their own __init__ when needed--see for example the polynomial models).
Remove the __init__ and __call__ generation from the custom_model decorator, since that part is now already handled (and somewhat better) by _ModelMeta.__new__
Fix typo in decorator per https://github.com/astropy/astropy/pull/2835/files#r16432656
Now that #2836 has been rebased on top of #2849 it no longer needs to include its own copy of the make_func_with_sig utility.  I also renamed make_func_with_sig to make_function_with_signature as suggested here: https://github.com/astropy/astropy/pull/2835#discussion_r16432378  Previously I thought the unabbreviated name was a little on the long side.  But on second thought I prefer the clarity here.
WIP: Initial commit.  Working prototype for at least single input/single output models.
Add a very simple test for model composition
It turns out comparing a single-element ndarray with a scalar returns a True-like value, so ensure that we actually get a float when a float result is expected.
Properly support compositions with array-like values and with multiple output models
Rudimentary support for using model *instances* in expressions as well as classes
Initial support for giving custom names to model classes
Add initial support for assigning custom names to models, as well as creating new model classes with custom names.
This is still temporary code, I think. But this fix is needed to properly support parameterless models here.
Some improved representation for model classes themselves.  There's room for improvement here but this is a start.