Add MatShell functionality to PETSc wrapper
This MR extends the PETSc global linear system classes to use MatShell and PCShell objects to wrap Nektar++ matrix-vector multiplication and preconditioners respectively. This therefore allows us to use PETSc's KSP objects, giving access to a wide range of iterative solvers, without explicitly constructing a PETSc sparse matrix.
Other minor additions:
- Generally improve documentation and formatting of the PETSc code
- Adds support for a Neumann boundary condition to linear elastic solver
- Updates PETSc cmake files to latest version