Stash computed form on tensor for re-assembly

When passing in a tensor to assemble, stash the form and computed
kernels on the tensor such that if we reassemble the same form on
the same tensor we save having to preprocess/split the form again.
Add test assembling different forms into the same Function
Add test assembling different forms into the same Matrix
Merge pull request #244 from firedrakeproject/stash-computed-form-on-tensor

Stash computed form on tensor for re-assembly
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.