Dill pickling

Changes:

- Use dill for pickling. Supports `Function("f")` but not subclasses of `Function`; `ReferenceFrame` should work.
- Reindented and refactored code somewhat.

Note that to deploy, you must setup dill first:

    cd dill
    python2 setup.py build

as dill requires that it is built via setuptools.

- [ ] Fix dill upstream to not require setuptools
- [ ] Make dill work with Function out of the box, if it doesn't already (whether this requires modifying SymPy or Dill or both). Ditto for every other SymPy object. 
- [ ] Remove the issue 2587 hack
- [ ] Just give an error on PickleError. Don't kill the rest of the session. `def f: yield` should be unpicklable, if I remember correctly.