Mat zeros

Fill newly created matrices with zeros, so petsc doesn't compact the space.

Additionally, rework sparsity construction to remove code duplication and implement parallel sparsity construction for all extruded cases.

AFAICT, this doesn't change the speed of sparsity building.
We can no longer get the array since we're no longer initialising with a given array. PETSc support this for BAIJ, but it's not exposed in petsc4py. Did you not want to bother dealing with that case?