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.
This should probably live in a `try`/`except` and raise an exception with a more comprehensible message. Also the `setup_requires` and `NumpyExtension` are now pointless with this unconditional import.