Mpi

Implement nascent support for MPI-parallel PyOP2.

Requires mpi4py

The only backend that implements this is sequential, but modifying other backends to do so requires a little more work (in feeding the plan the correct information).

Note, this gives no support for partitioning and renumbering a mesh in pyop2.  If you want correct MPI you have to feed the halo information and numbering in correctly by hand.  This latter is implemented in the floppy_gn branch of Fluidity, in which there are a number of MPI parallel UFL tests.

Untested, but hopefully working correctly:

Parallel reductions where the par_loop iterates over the exec halo

par_loops where some sets have zero size

no doubt numerous other corner case