Tidied up code for mesh smoothing via optimisation for 2D and 3D. Updated tests.
Deleted some dead wood; added distributed memory graph colouring algorithm.
House keeping.
Updated halo exchange so that two fields of the same type could be exchanged in a single message.
Start of DMPlex support.
Couple of bug fixes
Removed some crud.
Bug fix for parallel
Plex: Fixing boundary labels in create_unit_square
Plex: Fixing create_unit_square in parallel

Boundary labels can only be applied on rank 0 before DMPlexDistribute and
DMGetCoordinates needs to be DMGetCoordinatesLocal in parallel.
Plex: Restore closure after setting boundary IDs in create_unit_square
Added sketch of constructor for importing DMPlex object.
Hooked up simple test.
Plex: Add function to convert Plex->Fenics local numbering

This is required to match vertices with their opposite facets and allows
boundaries to be addressed correctly.
Plex: Building _ENList, boundary and _cords from DMPlex
Plex: Build and test unit cube mesh with boundary IDs
Plex: Add metric field to 3D plex_mesh test.

This avoids defaulting (hacking) the metric field in the Mesh constructor.
Added actual test to test_plex_mesh
Added actual test to test_plex_mesh; merge changes
Plex: Export mesh to DMPlex, including the preserved boundary IDs

The 2D plex_mesh test now performs a simple adapt and exports the
resulting mesh to a DMPlex object. Note, the boundary ID mapping
only performs Plex graph searches for facets that have a boundary ID.