Split expressions into a subtree for each component

Introduce a transformer ExpressionSplitter, that splits an expression
tree into a subtree for each component of the appropriate function
space.

If the expression is an assignment, that function space is the one
being assigned into. Otherwise the function spaces of the operands
of the root node in the expression tree have to match.

Any Function in the expression tree needs to either be defined on
the canonical function space, in which case it is split into
components. Functions on scalar function spaces are not modified.

The only other legal case is a Function defined on a function space
extracted from the canonical function space at a given index. In this
case, the function is inserted at the given index and a zero is
inserted into the expression tree for all other components.
Consolidate test helpers for expression tests
Correctly deal with indexed coefficients

A function must either be defined on the same function space that is
being assigning to, in which case we split it into components, or the
function space must be indexed and we return the Function for the
indexed component and Zero for every other.
Split expression tests into scalar, vector, mixed
Add subspace expression tests on mixed functions
Add more assign to function on different fs tests
Add expression tests on indexed mixed spaces