Add matrix-vector multiplication for PETSc backends

Partly addresses #240