Split forms when building FFCKernel

Does not work with disk caching for now since Coefficients can't be
serialised.
Use split forms when assembling

Adapt to changes in compile_form, which now returns a four-tuple of
index, domain type, coefficients and kernel.

We now need to pull apart the tensor and test and trial functions if
it is a mixed type and extract the component for the block the kernel
contributes to and filter the boundary conditions to only include
those defined on the current block.
Split the form in compile_form

FFCKernel goes back to handling only a single kernel on a single
integral.
Handle grad in FormSplitter
Simplify FormSplitter using splitting by construction

Instead of making one pass over the form and getting back a list of
subforms on the blocks of the mixed space, make as many passes as
there are blocks in the mixed space and only enabling one component of
each Argument at a time.

When splitting an Argument, create a UFL ListTensor where only the
component of the MixedFunctionSpace selected by the current block
index is included and all other components are set to Zero. These
Zeros are subsequently eliminated as they are used in expressions and
not propagated up the form tree.
FormSplitter: don't split coefficients
Only sum integrands if they are on the same domain
Only call FormSplitter if we have a mixed form
Access integrals via preprocessed form

When building integral_data for the form_data object, the domain_data
which Firedrake uses to carry the coordinate field is stripped. We
therefore need to get the integrals with intact integral_data via the
preprocessed form.
Extract coord field from measure in assemble thunk
Add firedrake-clean script to remove cached FFC kernels
Form splitter: correctly deal with renumbered form arguments
Add mixed helmholtz test cast in nonlinear form
Add test assembling derivative of form with 0 block
Cache split arguments to keep them unique
Allow extracting subspace 0 from (Vector)FunctionSpace
Add helper functions to build mat/vec in assemble thunk
Eliminate duplicate code for horizontal interior/exterior facet
Allow overriding FFC kernel cache directory from environment