In adaptive unsteady newton make REJECT_TIMESTEP a bool

Because it is a bool...
In fpdiff.py add calculation of maximum error and largest wrong value

Makes it easier to distinguish real problems from floating point errors.
Add and use a TimeStepRescaler class for adaptive unsteady newton

* The main reason is that I need to be able to modify how new step sizes
  are selected for self testing and debugging purposes.

* An additional benefit is that a number of time stepper parameters can
  be moved from the problem into the new class (they don't really belong
  in the problem since they are related only to adaptive time stepping).

* Another small benefit is that much of the (necessary but irrelevant to
  most people) complexity of adaptive unsteady newton is now wrapped up
  in a separate function.

* The variables moved are:

       double DTSF_min_decrease;
       double DTSF_max_increase;
       double Maximum_dt;
       double Minimum_dt;

   as far as I can tell no one modifies them anywhere. But if you do
   want to modify them then just use
   `time_step_rescaler_pt()->[variable]` instead.

* Minimum_dt_but_still_proceed is currently removed (because its
  implementation is weird and it seems useless) but I need to ask people
  about this.
In fpdiff.py handle IO Errors better

* When run as a script exit with non-zero status and print message

* When run from inside python throw an exception as normal

* Done by catching exception in run as script wrapper function
In explicit predictor calculation loosen tol on time paranoid check

(was often failing due to numerical errors)
Make get_dofs(...) functions const