Merge runtime_base into base, separate out PETSc bits

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 separate 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.
Always call the backend's set_mpi_commonicator
Add array property to CUDA Mat (previously inherited)
Remove {get,set}_mpi_communiator from the public API
Merge pull request #164 from OP2/merge-base-runtime-base

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. It requires
specializing the set_mpi_communicator function, which also needs to set
the PETSc MPI communicator when using PETSc. Removes this method from
the public API.

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.