Fix plan to colour matrices built on multiple map pairs

Previously the plan assumed that matrices would only be built on a
single pair of maps.  To fix this, determine the map to colour by
inspecting the matrix Arg, rather than looking directly at the first
rowmap in the Sparsity.
Use Map parent to compute colouring in plan

When imposing boundary conditions on matrices we make some of the map
values negative and remember where the map came from in the _parent
property.  Fix a segfault in plan construction when boundary conditions
are applied by always computing the colouring on the parent map if it
exists instead of the map itself.
Fix race condition in extrusion for OpenMP backend

The implicit extruded maps we build are private to each thread, however
we were previously building them as shared.
Make Arg iterable
Implement splitting of matrix Args
Override _data property on MixedDat to return tuple
Iterate over mixed arguments when building unwound args list
Split mixed Dat/Mat arguments when passing to kernel wrapper
Enable mixed unit tests for matrices and indirect loops
Eliminate duplicate code path when building unwound args
Merge pull request #287 from OP2/mixed-space-openmp

Add support for mixed spaces in the OpenMP backend.  This is done by
splitting mixed args into arguments of their components before passing
to the plan and kernel wrapper.

Additional fixes:
  - fix race condition for extruded map construction in generated code.
  - fix plan colouring if a Mat sparsity is defined on multiple pairs of
    maps.
  - fix plan colouring for maps with a parent (boundary conditions
    applied).