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.
Error on device backends for unimplemented Mat behaviour

We drop support for matrices on OpenCL completely, and do not yet
implement block-sparse matrices on Cuda.  Tests modified appropriately
to skip tests on device backends where the functionality is
unsupported.
Host code gen: fix overallocation of buffer size for dats