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.
So the PETSc team recommend not using MatCreateXXXWithArrays. We basically use it as a crutch to get (sequential) OpenCL matrices by a disgusting hack.  It doesn't work in parallel anyway.  So I felt this was a decent time to drop the support.