This follows the 'Extending and Embedding the Python Interpreter' document, specifically the design
of https://docs.python.org/2/extending/newtypes.html#providing-finer-control-over-data-attributes.
Extensive changes have been made including converting the setup() function into the __init__()
method, converting all functions to methods, creating the C struct for the class 'self' object and
defining Python data storage for the model name, the number of parameters and relaxation times, and
the numpy data storage for the chi-squared gradient and Hessian and the Jacobian and chi-squared
Jacobian. The gradient and Hessian methods now return numpy arrays rather than Python lists of
lists, and all methods require the parameter argument to be a numpy array (it segfaults otherwise).
A __new__() method has been defined to create the class and it initial objects. And a special class
destructor has been created to clear out the objects in 'self'.
Target function aliasing is handled by creating NULL method definitions in the PyMethodDef list.
Then the list is manipulated to alias the method by setting the NULL method item to one of the real
methods.