Copying the cache when adding Misfits

The cache was not being copied when added a Misfit to something else.
This meant that altering the original Misfit instance changed the cache
of the sum. That breaks computations in parallel because multiple places
will try to write to the same dict. Fixed this by shallow-copying the
cache when adding.

There is still a problem when adding 2 Misfits. The 'other' in the
addition (right side) is still the original. So this will also share a
cache. A way would be to copy the cache of 'other' if it has it.
Adding Objectives stores copies of parent objects

Modified add and mul overloads in Objective to keep copies of the parent
Objectives that originated them. This is so modifying the originals
doesn't affect the sum/mul. Also had to make wrapper methods use the
stored parents instead of curried versions of the original methods.

Added doctest for adding 3 Misfits.
Misfit addition copies the cache of parents

When adding Misfits, it's not enough to copy the cache of self. What is
actually used is the cache of both parents. So now I copy the cache of
both parents as well as model and positional argument dicts.
Misfit, Objective and sum/mul are picklable

Misfit, Objective and sums/multiplications thereof where not picklable.
This was because of the heavy use of instance methods (overwriting a
method at run time) when adding/multiplying. So I got rid of this. Now,
value, gradient, hessian, predicted, and residuals check if the object
has self._parents set (a sign that it is the result of +/*). If so, then
the return the sum/multiplication as needed. This gets rid of the used
of instance methods and allows the classes to be pickled.

A side effect is that subclasses of Objective now need to implement
_get_value, _get_hessian, and _get_gradient instead.

Pickling is important for storing solvers to use later and for
parallel processing. multiprocessing passes objects to other processes
using pickle.
Merge pull request #92 from leouieda/cache-copy

Copying the cache when adding Misfits