Various fixes/improvments to adaptive timestepping

Add separate (tested) function to compute ab2 steps.

Add separate local trunction error calculation function for bdf2 along with
a test that it is as expected.

Reimplementation of BDF2 adaptivity directly from G&S, not sure if it's
perfect yet--Milan said there was a mistake in the book. Also avoid
adapting if we don't have enough steps yet to do the calculations.

Fixed bug in adaptive midpoint: Use value at midpoint rather than yn for
starting value of AB2 predictor step.

Some attempts at improving adaptive mid point's effectiveness, not sure if
they worked.

When failing a timestep due to small scaling factor now return the new dt
as part of the exception and repeat the step with the returned dt (instead
of using a factor of 0.5). This gives much smoother time step changes.

In MagParameters now assign default values outside __init__() and take
alpha as an argument in __init__().