As pointed out by @nden here
<https://github.com/astropy/astropy/pull/2149/files#r10402422> that
different classes of models had different mechanisms for storing their
parameter values, creating a fair amount of unncessary complexity.

This change attempts to smooth out some of the differences by merging
the old ParametricModel class into the base Model class, so that all
models more or less operate on the same basis.  An added advantage to
this is that it adds full support for parameter constraints on *all*
models, which can be useful even outside the context of fitting.

This standardizes on the way ParametricModel stored parameters, where
all the parameter values are stored in a single flat array along with a
simple _param_metrics data structure providing information how to
extract individual parameter values from that array.  As @nden points
out this may not be the *best* way.  In fact, it might be difficult to
really make this work with parameters as Quantities.  But this was the
path of least resistance for the first iteration.

For now I've kept around a class named ParametricModel and its
subclasses ParametricModel1D and ParametricModel2D and the subclasses
thereof--the only thing that really distinguishes them at the moment is
the fact that they have the `fittable=True` flag.

This does *not* fully resolve the issue addressed in #2149, but it will
make the implementation for #2149 simpler.  This also adds a few
inefficiences, particularly in any models that have angular parameter
values that need to be converted to radians for compuations.  I have a
separate branch running parallel to this one that will attempt to
address that issue.
Somewhat clarified how constraints are stored on a model, and how their
initial values are set:

* Constraints are treated in two separate categories: 'parameter
  constraints' which are constraints on specific parameters, and
  'model constraints' which are general constraints on the model
  (specifically the 'eqcons' and 'ineqcons' constraints).
* All constraints are stored in the ._constraints dict.
* Setting of initial values of constraints is simplified so that only
  Model._initialize_constraints is responsible for this (though it still
  queries the individual parameters for any default constraints they may
  have).
Docstring tweaks as suggested by @cdeil
Rename Parametric.*Model to Fittable.*Model--a name whicih at this point better describes the small distinction it has over other Model types. All models (or almost all anyway) have one or more adjustable parameters of some sort or another"
Get rid of this set_joint_parameters that doesn't do much interesting and isn't even necessary for the current JointFitter implementation.  One can see how it might be useful to store somewhere on the model a reference to what other model(s) its params have been fitted against.  But for the time being if a user is setting up a JointFitter they already have that information.  Could still be worth revisiting though.
Apparently this won't resolve if I give the fully class name, and instead I have to drop the '.core' part.  Huh?
Merge pull request #2276 from embray/merge-parametric-model

Merge model classes