Use BAIJ matrices where possible

When building a matrix where rdim == cdim > 1, we now use
block-sparse (BAIJ) matrices.  This reduces the size of the sparsity
pattern we compute by a factor of rdim*cdim and allows for more
efficient matrix storage and insertion.  As a consequence, we no longer
create sequential matrices with arrays (these are not supported for
PETSc BAIJ matrices).  The parallel and sequential code therefore
becomes more closely aligned.
Fix block shuffle index for BLAS transformations

In this case, the kernel accepts a 1d array, rather than a 2d one, so
index appropriately.
Update tests in light of BAIJ changes

We no longer have any access to the matrix data array directly.
Host code gen: fix overallocation of buffer size for dats
Don't build block sparse Sparsities on device backends

The matrix formats we use on device backends don't support block
sparsities, so just pretend we don't have a block structure.
Error on opencl backend for unimplemented Mat behaviour

We drop support for matrices on OpenCL completely.  Tests modified
appropriately to skip tests on device backends where the functionality
is unsupported.
Set block size on Vecs obtained from context manager