Support computation of actions in the presence of bcs

Since bc application is not a right action, we cannot apply boundary
conditions to an assembled action(a, x).  To allow for this, accept an
optional bcs argument.  When bcs are applied, action now returns an
Action not a Form.
Split _assemble into two pieces

By splitting out the later piece, we expose the ability to assemble
kernels that have the same coefficients as an existing form but some
differences (for example if we want to assemble the diagonal of a
matrix).
Pass optional tensor argument to Action.assemble
Add utils for matrix free solvers
Add a MatrixFree class

You can call solve on a MatrixFree object to perform a matrix free solve
of a linear system.  The class implements the appropriate PETSc
callbacks so this could be hooked into the existing solver mechanisms
with a little more work.
Fix MatrixFree garbage collection issue

Remove circular references from PETSc types back to self such that the
python garbage collector can actually collect things.
Add test that MatrixFree object is correctly gc'd
Set options correctly in MatrixFree solve

We should default to KSP rtol of 1e-7.  Furthermore, we need to remember
to set the options prefix on the KSP as well as the options database.
Finally, bool flags need to be passed as None to switch things on.
Add tests of MatrixFree solve

Test solving both a mass matrix problem, and a Poisson problem with
strongly imposed boundary conditions.
Can't extract diagonal, so disable matrix-free PC

This also causes the test_poisson_analytic_matrix_free to fail.