Cache bilinear form action on the Matrix

This saves us from having to go through compile_form repeatedly for
the form action of the bilinear form of a matrix on a function, which
is required for solving linear systems with boundary conditions.
DMPlex: Turn dmplex.py into extension module with PETSc linkage
DMPlex: Optimising cell closure reordering

We now apply the Fenics renumbering to cell closures via the PETSc
C-interface and store the re-ordered closures for all cells with
the mesh. This ensures that we perform the minimum of costly Plex
closure calls, because all other numberings (eg. facets) can be
derived from the reordered closures.
DMPlex: Optimising local facet numbering

Using the reordered cell closures we can derive the local facet
numbering directly without costly sorts and Plex closure calls.
DMPlex: Compute facet numbering only once

We now defer the facet numbering computation until the first
FunctionSpace intialisation and forced by building a simple FS.
The created interior and exterior facet numberings are then stored
with the mesh and reused whenever we build other FunctionSpace.
DMPlex: Generate OP2-ordered cell and facet lists with C loops
Always flatten PyOP2 par_loop args
No longer raise exception when using mixed + VFS
More detailed Firedrake installation instructions
Use correct function when assembling cached form action

Replace the coefficient in the cached form action by the currently
passed in Function. Otherwise we'd keep using the Function from the
first call to _form_action.
Add note explaining efficiency gain of caching form action
Add test for Matrix form action
Merge pull request #250 from firedrakeproject/performance/cache-ufl-action-on-matrix

Cache bilinear form action on the Matrix

This saves us from having to go through compile_form repeatedly for the form
action of the bilinear form of a matrix on a function, which is required for
solving linear systems with boundary conditions.
Merge pull request #251 from firedrakeproject/mixed-vfs

Always flatten PyOP2 par_loop args
Compute fieldsplit ISes correctly with VFSes

We need to multiply the number of sparsity rows by the dim of the row.
Merge pull request #247 from firedrakeproject/plex-optimise-numbering

Make mesh numbering go faster.
Initial import of assembly cache.

This is an essentially unmodified import of George Boutsioukis' code.
delint
Clean up some logic
Replace obsolete debug function