Merge runtime_base into base

Since we no longer plan to build a PyOP2 version for static analysis,
there is no good reason to keep base and runtime_base separate.

This merges runtime_base into base and updates other backends to
inherit directly from base.

Also separates out all functionality using PETSc to a separate module
petsc_base, which sequential, opencl and openmp inherit from. This
brings us closer to making PETSc an optional dependency.

Adds a array property to cuda.Mat, which was formerly inherited from
runtime_base but actually did the wrong thing i.e. initalized a PETSc
matrix.