DMPlex: Creating Halo objects from DMPlex

We derive the local receives and remote sends from the associated PetscSF
and propagate the remote sends to the sender. The global_to_universal
numbering map is derived directly from the global and universal numbering
sections associated with the FunctionSpace.
DMPlex: Adding support for internal and external facets

Internal and external facets are marked on the sequential Plex
using DMLabels, from which the auxiliary _Facets object can be
derived. The local facet numbering is derived according to Fenics
rules from the Plex topology.
DMPlex: Adding support for boundary IDs

Boundary IDs are applied via the Plex label "boundary_ids" and
mimic the previous gmsh-based unit mesh setups.
DMPlex: Switching most remaining unit meshes to use DMPlex.

Build DMPlex objects from coordinate and cell-to-node mapping for
unit triangle, tetrahedron and interval. UnitCircle still requires
Gmsh meshing, but _from_file() now uses DMPlex's Gmsh interface.
DMPlex: Creating IcosahedralSphereMesh from DMPlex

This requires proper dimension handling, where topological and
geometric dim can be different.
DMPlex: Adding Plex-based extrusion

For extruded function spaces we use sections that point to stacked
vertical dof columns for each point in the base plex. When building
element->dof mappings we then traverse the closure explicitly and add
the DoFs belonging to the first element in the stack according to
explicit extrusion numbering rules.
DMPlex: Relaxing several convergence tolerances
DMPlex: Adding (limited) support for various mesh formats
DMPlex: Reordering cells according to OP2 classes
DMPlex: Ordering facets according to OP2 class
DMPlex: Implementing Triangle mesh format reader

After building a Plex from the cell->vertex map and the coordinates
we have to search the Plex for the facets to apply boundary IDs to.
DMPlex: Switching 2D cohomology test to use Triangle mesh format