DMPlex: Adding basic DMPlex interface

UnitSquare/Cube meshes are now built on-the-fly from a DMPlex object,
from which the cell_node_list is created when building a FunctionSpace.
For mesh files a simple DMPlex object is created from the old Fluidity
mesh object and handed over to the new DMPlex interface.

The new DMPlex interface is very basic and only works in serial with
non-extruded meshes. Higher order function spaces and boundary
conditions are also missing.
DMPlex: Enabling higher-order function spaces

FunctionSpaces now hold a Plex-generated PetscSection that
describes the global node numbering (topology->DoF mapping).
From this we generate a Fenics-style local numbering for each cell
closure, which allows us to populate the cell_node_list.
DMPlex: Marking PyOP2 entity classes in the Plex

This is required to reorder DoFs into contiguous vector sections.
DMPlex: Reorder global and universal node numbering

Reordering the global and universal node numbering created by the
Plex is required to make DoFs contiguous within each PyOP2 entity
class. The DefaultSF that defines the halo-exchange can then be
derived from the new node numbering exchange.

DMPlex: Cleaning up node renumbering
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. Only 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: Disabling tests that require improved Gmsh support in PETSc