Build vector space for mixed basis from components

It's convenient to specify the individual pieces.  If we pass a function
space in to the mixed basis constructor we can build the space we need
to project out of monolithic mixed operators.
Pass list of ISes into nullspace._apply

We need these so we can compose the nullspace with the appropriate IS
for projecting it out when using Schur complements.
Simplify mixed nullspace test

Also test that not applying the nullspace in the Schur complement case
fails to converge.
ExpressionSplitter: Simplify assignment to indexed LHS

If the LHS is indexed, only build scalar operands i.e. tuples of
length one and not the full size of the parent function space.