Add halo exchange functions on MixedDat

Previously we deferred to the superclass functions, which don't do the
right thing.
Create correct sparsity pattern for non-square blocks
Ensure space for diagonal entries in parallel matrix

In parallel, we don't allocate the complete sparsity pattern, only the
correct amount of space for non-zeros.  When we apply strong bcs, we
throw away entries, including on the diagonal, resulting in the final
assembly compressing that space away.  Explicitly place zeros on the
diagonal on first assembly so that there's always space for them.
Compute correct ISes for parallel mixed vecscatter

A MixedDat of k Dats on P processes is laid out on process i as:

    (x_0_i, x_1_i, ..., x_k_i)

The correct ordering for multiplication by a MixedMat is:

    (x_0_0, x_1_0, ..., x_k_i, ..., x_0_P, ..., x_k_P)

Previously we produced

    (x_0_0, x_0_1, ..., x_0_P, ..., x_k_0, ..., x_k_P)

instead, which led to incorrect results when running in parallel.
Add new function to increment local rows in Mat