Move MPI implementation from base to runtime_base

It doesn't make sense to have base implement halo swapping and so
forth, since this requires a runtime, so move the code around
appropriately.
Add more documentation to Halo object
Another FIXME comment
Rename MPI_COMM to PYOP2_COMM
Add comm keyword arg to op2.init

When we initialise the runtime, set up the PYOP2_COMM communicator
variable.  If no communicator is given, use MPI_COMM_WORLD.
Only create send and receive buffers if there is a halo

If the Dat's dataset doesn't have a halo associated with it, then we
will never do halo exchange on the Dat, so don't need send and receive
buffers.

Additionally, create correctly sized buffers.  They should be the size
of the halo's communicator rather than the size of the
PYOP2_COMM communicator.  At the moment these are the same, but if we
put halo exchanges on different communicators, then they won't be.