cmake: Add module to search for petsc4py
cmake: Provide a split version of PETSC_VERSION

We'll need this to do version checking against the petsc4py version in
the next commit.
cmake: Add petsc4py as an optional package

If PETSc and the python interface are enabled, look for petsc4py, so
that we can expose PETSc objects to the python interface in a
usable fashion.
common: Only try and finalize PETSc if it hasn't already happened

Calling PetscFinalize twice results in PETSc printing an error.  If
compiled with petsc4py support, PetscFinalize will be called in the
atexit handler of both petsc4py and DOLFIN.  The former guards against
repeated calls by checking the static variable PetscFinalizeCalled, do
the same here.
common: provide has_petsc4py function

True if DOLFIN has been compiled with petsc4py support.  This is not
the same as the availablity of the petsc4py python module, since
compiling in support is optional.
nls: Expose _snes pointer from PETScSNESSolver
swig: Add typemaps to expose PETSc objects to python via petsc4py

If petsc4py is installed, we can use the swig typemaps it provides to
expose PETSc objects to python.  Do this for PETScMatrix,
PETScXXXSolver and PETScVector classes.  For example, you can now do:

   a = assemble(...)
   A = as_backend_type(a)
   mat = A.mat()

to get a petsc4py Mat wrapping the matrix in A.
demos: Add petsc4py demo
Small fix to demo_petsc4py.py and fix for when petsc4py is not installed
Small format changes to demo_petsc4py.py
Merge branch 'wence/petsc4py'