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
Reorder time stepper/problem actions_after_implicit_timestep()

Needed to make my midpoint stuff work.

However the calling orders are now asymmetrical in time... Needs more
thought before it goes into core oomph-lib!
Make shift_time_values() virtual

So it can be overloaded in my semi-implicit problems.
In MidpointMethodByBDF also shift pinned values in update step

* This implementation of midpoint rule uses a BDF1 step to the midpoint
  followed by an algebraic update to get to the end of the time step.

* The update should probably be applied to all values, but was only
  working on dofs before.

* Shifting pinned values is still optional in case it breaks something.
In parallel_self_tests.py improve detection of hlib tests

Prevent it from detecting "oomphlib" as containing hlib in
check_if_hlib_driver().
Add magic number for pinning only for a segregated solve

Having a separate number to normal pinning allows us to easily undo the
segregation at the end of the solve.
In explicit time stepping move f calculations inside actions_before...

Otherwise we can have issues with segragated solves where values aren't
correctly pinned for the first f evaluation.
In Problem::calculate_predictions() fix unused variable warning

(Needed PARANOID flags)
Add option: crash if a Newton step fails even inside adaptive time step
In SumOfMatrices rename maps and add access functions
In problem add function to set history values of dofs
Add output operator for Data objects
Rename Explicit_solver_pt to Mass_matrix_solver_pt
Add function get_dvaluesdt and use it instead of get_inverse_mass_...

Motivation:
* Before this was done by modifying the time steppers then calling
  get_inverse_mass_matrix_times_residuals(...).

* This name is more representative of what the function is actually for.

* Now modification of time steppers only needs to be done in one place
  rather than multiple places (in TR::actions_before_timestep(..) for TR
  and in Problem::explicit_timestep(...) for explicit time steppers).

* Any additional pre-get_dvaluesdt modifications to the problem can now
  be easily added by overloading. (e.g. in LLG problems we sometimes
  need to modify the residual function being used.)

Implementation:
* For normal problems get_dvaluesdt(..) just modifys time steppers then
  calls get_inverse_mass_matrix_times_residuals(...).

* All explicit time steppers now call get_dvaluesdt instead.
Fix bug where copied nodes were updated twice by imr
Add more detailed error message in imr update
Make clear_copied_pointers() public

It is useful to be able to convert copied (i.e. periodic) nodes back
into normal nodes.
Allow make_node_periodic(..) to make copies of copies of nodes

In make_node_periodic(...) if the node to be copied is already a copy it
now handles it instead of crashing.

It handles it by making the node a copy of the "node_to_be_copied"'s
copied node (we need better terminology here... sorry).

So starting with n1 not a copy and n2 a copy of N:

n1
n2 -> N

if we call make_node_periodic(n1, n2) we get:

n1 -> N
n2 -> N

which seems sensible.