Create right FIAT element from OuterProductVectorElement
Minor fix to test_extrusion_assemble_p0
Refactor function spaces to derive from FunctionSpaceBase
Keep an index to each component of a MixedFunctionSpace

When extracting a component FunctionSpace from a MixedFunctionSpace
it is often necessary to know which position in came from in the
MixedFunctionSpace. Therefore the components of a MixedFunctionSpace
get an index associated during construction by wrapping them in an
IndexedFunctionSpace.
Turn IndexedFunctionSpace into a thin wrapper

To make IndexedFunctionSpace work just the same as the object it is
wrapping, we set the __dict__ and __class__ or the wrapper to that
of the original object. That way instance checks works as expected.
Override IndexedFunctionSpace.__repr__
Allow initialising a Function with a op2.Dat
Test initialisation of Function with array and op2.Dat
Implement Function.split()
Apply Function.split() in test_assemble
Turn IndexedFunctionSpace into a proxy for the fs
Considerably simplify IndexedFunctionSpace proxy
Extract component space from IndexedFunctionSpace
Add tests for indexing/splitting MixedFunctionSpaces
Minor refactoring of test_expressions fixtures
Move index property to FunctionSpaceBase
Give FunctionSpaceBase a len of 1
Refactor expression tests

* Split fs fixture into separate fixtures for scalar and vector/mixed
  function spaces
* Use a factory to create functions on those function spaces
* Parametrize test cases with the expression to test for and eval it
Use operands.operator() instead of private attribute
Add operands method to AssignmentBase