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.
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
Pass mesh generator options for 2D meshes

This means we actually produce regular meshes (rather than just a
delauney triangulation with starting from specified seed points).