Support providing a form to act as preconditioner

Often we know something about our problem that means we can construct a
preconditioning matrix that is different from the operator itself.
Support this in the variational formulation solve interface by allowing
the user to pass an optional Jp form used to assemble the
preconditioning operator.  If Jp is not provided, we default to using
the provided operator to construct the preconditioner as before.  Note
for consistency in naming, when building a LinearVariationalProblem we
use aP (rather than Jp).
Correctly attach nullspace to both mat and pmat
Add section in docs on providing pmat separately
Simplify pmat construction

Don't need a needs_pmat slot, just check if Jp is None.
Construct Mat Args using SparsityMaps where necessary

If the sparsity was built with restricted
domains (e.g. ON_INTERIOR_FACETS), we need to inform the Arg call when
build a Mat tensor argument, otherwise we get ALL (even though we're
actually not going to iterate over the whole map) passed in to the Arg
checker and we get complaints.  To fix this, build the appropriate Args
using SparsityMaps (as well as in the Mat construction and par_loop
iterate keyword).
Merge pull request #340 from firedrakeproject/moar_sparsitymap

* moar_sparsitymap:
  Construct Mat Args using SparsityMaps where necessary
Merge pull request #338 from firedrakeproject/separate_pc_form

* separate_pc_form:
  Simplify pmat construction
  Add section in docs on providing pmat separately
  Correctly attach nullspace to both mat and pmat
  Support providing a form to act as preconditioner
Fix the argument generated by derivative.

We previously had a false assumption that taking a Gateaux derivative
always results in adding a TestFunction. Now we add the next unused
Argument to the form, which is always correct.
Fix up createSection calls in line with petsc4py changes

Number of fields is now determined directly from the length of the
numComp argument, rather than passed in separately.
Try old createSection calling convention first
Merge pull request #343 from firedrakeproject/petsc4py-compat

* petsc4py-compat:
  Try old createSection calling convention first
  Fix up createSection calls in line with petsc4py changes
specify gdim for extruded meshes
add cylinder Betti number and area tests
Fix LinearVariationalSolver docstring

solver_parameters, not parameters.
Add backwards-compatibility for parameters keyword to FooSolver

Accept both parameters and solver_parameters, preferring the latter and
warning if the former is used.
DMPlex: mark non-exec-halo facets

Interior facets that only touch halo vertices /and/ halo cells need to
be marked as non-exec: we don't have enough data to compute over them,
but the data needs to be there such that assembly can execute
redundantly in parallel.

This actually produces exec halos that are slightly too large for fully
discontinuous fields: in that case we don't care about halo vertices,
only halo cells.  However, rather than specialising the code dependent
on the function space we just take the (hopefully minor) hit.
DMPlex: add non-exec halo facets to plex_reordering and facet_ordering
DMPlex: add non-exec halo to dof_classes
Enable interior facets in parallel

Now that we mark non-exec interior facets correctly, interior facet
integrals should work, so remove NotImplementedError from appropriate
assembly and expected failure from parallel upwind flux test.

dS_h integrals (extruded interior horizontal facets) are still broken,
so leave that error in.
Add __name__ == '__main__' magic to test_upwind_flux