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
Fixing Triangle mesh format reader in parallel

Only read the triangle files on rank 0 and let the Plex
distribute the topology.
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.
Bugfix: actually install the geometry header.
Merge pull request #254 from firedrakeproject/fix/triangle-mesh-parallel

Only read triangle files on rank zero and then distribute.
Use copy par_loop when assigning Function on the same fs
Add shortcut for +=, -=, *=, /= operators on Function

Fall back to PyOP2 Dat arithmetic operators if operand is a scalar
or a Function on the same function space (for += and -= only).