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
Fix path in demos Makefile
Fix gitignore for new path structure
Adapt to changes in PyOP2 matrix assembly

The Mat user must now call assemble explicitly to ensure the matrix is
built before using it.
Allow exterior facet integrals in parallel
Set up fieldsplit ISes correctly for parallel running

Numbering of fields on process N is offset by the sum of the rows of the
big matrix on processes 0, ..., N-1 (inclusive).
Merge pull request #244 from firedrakeproject/stash-computed-form-on-tensor

Stash computed form on tensor for re-assembly
Test mixed poisson problem in parallel

Use both normal gmres+jacobi solve and fieldsplit solve.
Merge pull request #242 from firedrakeproject//matrix_assemble

Adapt to changes in PyOP2 matrix assembly.  After queuing up par_loops
to assemble matrices, we must explicitly call matrix.assemble()

Additionally, remove restriction on assembling exterior facets in
parallel and add parallel fieldsplit support (tested with mixed poisson
problem in parallel)
Declare kernel argument of correct size for interpolating on VFSes

The local tensor is space_dimension * dim (which is 1 for function spaces).
Default to CG when projecting

The system is SPD so don't explicitly set the KSP type to CG (rather
than the default GMRES).
Don't overwrite user solver_parameters dict

For mixed problems, we set the default pc_type to jacobi by calling
setdefault on the provided parameters dict.  If the user passed one in,
this modifies it in place.  So take a copy for ourselves before changing
it.
Test that carrying out multiple projections is reproducible

    x = project(foo, V)
    y = project(bar, Q)
    z = project(foo, V)

Should result in x and z having identical values.
Added interior facet + mixed/vector fs test