Add support for vector function spaces in mixed function spaces

It is now safe to declare an Arg on a mixed space as flattened and
the right thing will happen for each of its sub spaces.

This involved a lot of cleaning up of our host code generation mess.