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.
Add ignore_blank keyword to fits.open
Apparently this won't resolve if I give the fully class name, and instead I have to drop the '.core' part.  Huh?
Typo in relase procedure

I read through that to see if I can use this as a blue-print for another project...
Merge pull request #2307 from ChrisBeaumont/blank

Add ignore_blank keyword to fits.open
Merge pull request #2320 from hamogu/patch-2

Typo in relase procedure
Merge pull request #2276 from embray/merge-parametric-model

Merge model classes
Update CHANGES.rst

Add record of the changes in #2276
Use the `ignored()` context manager where appropriate.  This litte
bugger was just added to the stdlib, and I wanted to bring it into
astropy and use it where appropriate before I forgot it exists, because
I was so enamored with it: http://bugs.python.org/issue15806

As this notebook [1] shows, this is a little slower (about 5x, but on the
order of < 10us) than using try/except directly, so I avoided using it
in some loops.  But elsewhere it's fine to use and a lot nicer looking.
But this is mostly silly and purely optional.

[1] http://nbviewer.ipython.org/urls/gist.github.com/iguananaut/169ba550944e4020dff9/raw/0247ab9190b39b35b14c750aa8fe93d3da1228aa/ignored_performance.ipynb