Fix/mixed parallel

Fixes for mixed/parallel execution:

- MixedDats gain halo exchange functionality
- Sparsity building dtrt for non-square blocks
- mat row zeroing dtrt running in parallel (zeroing process local rows appropriately).
- mixed dat vec contextmanager produces correct ordering for petsc MatMult.

Note zero_rows should probably be renamed (since it doesn't zero the row, just sets a diagonal value).  I will do that if people are overall happy with these changes.