Add derivative calculations for some example residuals.
Clean up ode.py and add my own newton solver

* Move lots of function around

* Add lots of documentation

* Tidy up construction of adaptive schemes
  Moved some common code to a single function and use factory to construct
  the final adaptor.

  Allows us to have separate lte estimation functions which is often
  useful.

* Add basic ability for adaptive midpoint ab method to use explicit derivative
  calculations to improve interpolation accuracy.

* Add a Newton solver with tests
  Scipy's Newton solver that I was using forced the use of Krylov
  solvers. Krylov solvers might not be accurate for some of the lower
  Newton tol experiments.

* Add a helper function to tidy up and save figures