Switch to floor divison where applicable.
Remove some unecessary imports.
Use raw strings where appropriate.
Remove the cumbersome BlockDiagMatrix type.
Avoid using np.unique on object arrays.
Change the default row/column packing order to SoA.

This is somewhat simpler than AoS and will eventually permit us
to remove AoS support completely from the backend interface.  The
change also moves the PyFR solution file format over to SoA from
AoS.  Solution files from previous versions of PyFR are no longer
supported.
Remove support for the AoS packing order in the backends.

All backend I/O is now in the SoA packing order.  This is simpler
and more efficient.
Cleanup how OpenMP arrays are sized and allocated.
Pack the S-matrices as matrices rather than vectors.

This improves the readability of some backend kernels.
Clean up the MatrixBase.get() method stub.
Remove the erroneous @abstractmethod on MPIView.__init__.
Cull some extraneous comments in the CUDA backend.
Move another integer divison to floor divison.
Change how matrices are allocated in the CUDA backend.

All pitch computations for aligned matrices are now performed
explicitly.  This is a requirement for allocation groups.
Make mat.pitch and mat.traits properties.

This eliminates some code duplication between the CUDA and OpenMP
backends.
Refactor MatrixBank.
Fix a typo in an error message.
Remove support for allocation tracking from the backends.

This functionality has never been utilised.
Add support for allocation extents.

These allow for multiple matrices to be allocated together
as a single block of memory.  Extent support is a requirement
of an OpenCL backend (which does not permit arrays of pointers).
Change views to use a base pointer + offset map.

This saves a small amount of memory (a four byte offset compared
with an eight byte pointer).