Implement setting diagonal of a matrix and unit test

Only for backends using PETSc i.e. not CUDA
Add matrix-vector multiplication for host backends
Add Mat * Dat unit test
Also allow multiplying Mat by PETSc Vec
Add Mat * Vec unit test
Merge pull request #247 from OP2/mat-vec-mult

Add matrix-vector multiplication for PETSc backends