Move build_face_element into FiniteElement

Particular changes:
* Add functions to obtain face element information from QElements

* Make a general build_face_element() function which works for all geometries
** virtual so it can be overloaded for e.g. solid elements
** requires the face element info functions
** reduces copied code

Main idea:
This (in combination with some other code) allows us to not need to inherit
from QElements to create a final element, and so get rid of the diamond of
death inheritence currently in elements. This will mean that:
* We don't need to copy bits of code like

    void output(std::ostream &outfile, const unsigned &n_plot=5)
    {MicromagEquations::output(outfile,n_plot);}

  into hundreds of places throughout oomph-lib.

* We never need to worry about virtual inheritance

* We can use (checked) static_casts
  (casting done at compile time instead of run time so potentially faster)

* No need to force building of all possible templates of an element
  i.e. we can get rid of

      template class QMicromagElement<2,2>;
      template class QMicromagElement<2,3>;
      template class QMicromagElement<2,4>;
      template class QMicromagElement<3,2>;
      template class QMicromagElement<3,3>;
      template class QMicromagElement<3,4>;

      template class TMicromagElement<2,2>;
      template class TMicromagElement<2,3>;
      template class TMicromagElement<2,4>;
      template class TMicromagElement<3,2>;
      template class TMicromagElement<3,3>;
      template class TMicromagElement<3,4>;

  which will reduce compilation time and binary size.

To achieve this we need be able to separate out geometric properties into a
non-element class, which can then be accessed via a pointer instead of via
inheritance. The problem is that build_face_element accesses the element's
nodes. Hence we need to move into FiniteElement.

Other notes:
* No changes to other geometries yet, but completely backwards compatible
* All self tests pass
Add hlib into oomph build system

* Linking handled automatically in the same way as other libraries

* New configure option --with-hlib
  (only works with default hlib install location for now).

  Doesn't build it for you (yet?).

* Define a symbol: OOMPH_HAS_HLIB

* Conditional build of demo_drivers using hlib in parallel_self_test.py
Add patches and instructions for building oomph-lib with Hlib
Make set_dimension() and set_nnodal_position_type() public

This is required to be able to set element geometry properties in a factory
function rather than a constructor.

These are only access functions, which are ususally public, so this change
is consistent with other similar functions.
Add functions to construct SumOfMatrices lookups from an array of ints

* This is the data format for HLib's lookup schemes, so this is useful for
  creating hierarchical matrices with some non-hierarchical
  additions. E.g. for BEM corner contibutions.
Rename functions, variables and update comments in SumOfMatrices

Used to be lots of things related to "nodal to global mapping", but the
code is actually much more general than that implies. In fact it only needs
some form of mapping from the added matrix to the overall sum matrix and
back.
Remove deprecated variable from Makefile.am s

INCLUDES is deprecated in automake and displays a warning since automake
version 1.13. Replace uses of INCLUDE by AM_CPPFLAGS as recommended by the
warning message.
Add function to doc all the command line flags (in oomph_utilities)
Move Predictor_storage_index into timestepper base

* Stores the location of the predicted values so that they can be used by
  other code.

* Store an index of -1 if not assigned (e.g. if time stepper is not
  adaptive). Paranoid mode checks for -1 and throws an error.
Add code and Problem parameter to use predictor values as initial Newton guess

Turned off by default.
Add dump helper functions which take a filename and open the stream
Implement Mesh::reorder_nodes() in terms of Mesh::get_node_reordering

Makes sense to have only one implementation of the reordering algorithm
rather than two.
Add option to order dump output by x position

* Off by default.

* The following self tests fail if using it (mostly due to inconsistent nodal dimension)

/home/david/oomph-lib/demo_drivers/helmholtz/scattering
/home/david/oomph-lib/demo_drivers/unsteady_heat/two_d_unsteady_heat_midpoint
/home/david/oomph-lib/demo_drivers/interaction/fsi_channel_seg_and_precond
/home/david/oomph-lib/demo_drivers/bifurcation_tracking
/home/david/oomph-lib/demo_drivers/interaction/fsi_channel_with_leaflet
/home/david/oomph-lib/demo_drivers/interaction/acoustic_fsi
/home/david/oomph-lib/demo_drivers/navier_stokes/channel_with_leaflet
/home/david/oomph-lib/demo_drivers/axisym_navier_stokes/torus
/home/david/oomph-lib/demo_drivers/time_harmonic_linear_elasticity/elastic_annulus
/home/david/oomph-lib/demo_drivers/optimisation/disable_ALE/unsteady_heat
Fix bug in problem::get_dofs(t, ...) for elemental data

I was using the wrong index to get the values of dofs stored as elemental
data.
In nrow_local() and first_row() only check for comm_pt != 0 if distributed

Because in the non-distributed case:
1. We don't need the comm_pt to get the values
2. Null comm_pt is commonly used as a dummy communicator.
In fpdiff.py don't call sys.exit in the middle of functions

It crashes any python code calling fpdiff(..)! Instead return the err code
and exit as normal.

Also: add default args for fpdiff(...) when called from inside python.
Add option in fpdiff(..) to output data to streams other than stdout

* No different when called as a script

* Default is just to use sys.stdout
Add option to disable triangulateio specific parts for dump/restart

Doesn't work with some elements and isn't needed if not using adaptivity.
In CommandLineArgs::doc_all_flags(..) quote blank strings

otherwise trying to parse the output in any way (e.g. for plotting) will go
wrong
In oomph-convert report which file can't be opened in error message