Largely trivial whitespace and spelling cleanup, with renames to a few local variables and a few comments with TODO items.
Move the indent() utility function into astropy.utils and use it to make some of these __repr__ methods look a little nicer.
Some changes to function/variable/argument/attribute names for better
naming consistency:

1. xdeg -> x_degree, etc. for consistency with other names like x_window
   each variable like this places an underscore after the dimension
   label and spells out the property associated with that dimension

2. pars -> params: not spelling out "parameter" constantly seems fine
   but a consistent abbreviation should be chosen. I want with "params"
   over "pars" which seems a little more explicit

3. In the `Parameter` class: parshape -> shape (the "par" part seems
   superfluous). Likewise param_dim -> dim; I realize param_dim was
   consistent with the param_dim attribute on Models, but it still
   seems superfluous to read things like `param.param_dim`.
   Finally mclass -> model. The name "mclass" suggests a class, not an
   instance of a model.  I thought of something like "modelobj" or
   "modelinst" but finally "model" just seemed clear enough.

4. cons -> constraints; "cons" as an abbreviation is a little ambiguous
   IMO

5. OrthogPolyBase -> OrthoPolynomialBase; preferred to spell out
   Polynomial same as in PolynomialModel. Also 'Ortho' just rolls
   off the tongue a little easier to me than 'Orthog' but this is
   admittedly highly subjective....
Fix some double list copies
Moved the ModelDefinitionError and InputParameterError out of utils and closer to their relevant modules. Also removed unecessary extra structure to their class definitions.
Defined an EulerAngleRotation base class for RotateNative2Celestial and its inverse, containing a lot of shared functionality.
Convert these methods to staticmethods since they don't need to use the class or instances of the class they're defined in directly (they're just the definitions of the functions these models are wrapping).  The one exception was Box1D where it was useful to classmethod.
More WIP; most of the tests passing now
WIP: Fixed some issues with rotation models and with composite models (still need to tweak those though)
This takes care of a few more of the tests by setting the parameters properly.
The _validate_lam function required model.mu to be set, but that's not necessarily the case when this is called from within the model's constructor and vice-versa for _validate_mu.  This should take care of it by making sure the parameter access raises an AttributeError and that that error is caught and ignored
As discussed in #980, rewrote Custom1DModel as a decorator that returns a class.
Fix some slight bugs in the handling of 2D rotation matrices
col_deriv should be false for polynomial models; let's also make this a class attribute along with linear
Fix up how some of the projection models were using their parameters in computations.  For example gamma shoud be used in its raw (radians) units.
Don't always convert the parameter value to an array for simple arithmetic operations (but do for comparison operators for consistency when comparing with arrays vs non-arrays)
Elimate unnecessary additional branching, as well as whitespace
PolyND -> PolynomialND just for the sake of consistency (none of the other classes abbreviate 'Polynomial')
Cleanup whitespace usage in this module.  Rename it to to example_models, as model_lists was no longer terribly accurate--especially since there are no actual lists of models in it (model_dicts might have worked but I think example_models is more clear as to what it is.
Replace the `_convert_input` and `_convert_output` functions that had to
be used in every `__call__` with a simple decorator that performs the
same function for n-dimensional models.

I'm still not crazy about the name `format_input`--it's a little vague,
for one, and it also affects how the output is formatted.  Still, I
think this simplifies the code a bit.