Allow higher order function spaces in outer iteration

The mixed Helmholtz problem solved in the outer iteration can be formulated in higher order function spaces, such as BDFM1 and DG1. The pressure correction equation is still solved in the lowest order space. This commit is a first implementation which runs, but the outer iteration does not converge properly yet.
Updated documentation
Added section on higher order mass lumping

Explain how the mass lumping would work for higher order BDFM1 spaces.
Experimental implementation of BDFM1 velocity mass lumping

Added code for BDFM1 velocity mass lumping based on solid body rotation field as described in the latex notes.
Some cosmetic changes to interfaces

The build-map-methods now return the appropriate maps instead of writing directly to class data.
Tidying up and comments

Tidied up code and added comments, removed test code.
Optimised implementation for diagonal lumped mass matrix

If the local 4x4 blocks of the lumped mass matrix are diagonal the implementation can be optimised both in the lumped mass matrix construction and it's application. It is only necessary to store the diagonal of the 4x4 matrix as a vector of length 4. The matrix application also simplifies as each component only has to be multiplied with the corresponding diagonal element instead of doing a 4x4 matrix multiplication.
Updated documentation
Notes on higher order block smoother

Added notes on the construction of a block-diagonal matrix which can be used in the smoother for higher order pressure spaces.
Updated notes
C code generator for 3x3 matrix inverse kernel.

Python script for generating the C kernel code for inverting a 3x3 matrix in place. This is required for inverting the 3x3 DG1 -> DG1 block-diagonal matrix in the higher order smoother.
Higher order Jacobi smoother.

Implemented a Jacobi smoother for the BDFM1 + RT1 finite element pair with velocity mass lumping. Moved the construction of the lumped BDFM1 mass matrix to the file lumped_mass.py, which now contains the lumped mass class for both lowest order (RT1) and higher order (BDFM1). Improved the construction of the (block-) diagonal operator by using a firedrake constant. Some other small changes to driver programs to account for these changes.
Removed reference to unused file.

The file lumpedmass_bdfm1.py has been merged into lumpedmass.py in the previous commit, so it should not be referenced in the module initialisation file.
Corrected sign error.

The sign is now defined consistently with the latex writeup and is correct for the mixed Helmholtz system arising from implicit time stepping in the shallow water equations.
Removed reference to lumpedmass_bdfm1.py module.

The code in this module has been moved to lumpedmass.py.
Corrected rst comment.
Corrected notes
Moved Schur complement solve to separate method.

The Schur complement solve of the mixed system with lumped mass matrix has been moved to a separate method. Apart from tidying up the code this will eventually allow easier implementations of alternative iterative methods such as MINRES or GMRES.
Fixed line breaks and mathematical comments
Implemented hp-Multigrid algorithm

Wrote a class which can be used to implement a hp-cycle. The first coarsening step consists of projecting to the lowest order pressure space, on which we call the ordinary h-Multigrid. The restriction and prolongation between the low-/high-order pressure spaces are implemented in the hpMultigrid class which makes the file interordermapper.py obsolete - it is removed from the codebase.
I also adapted the driver so that it can run both at lowest and at higher order.