DMPlex: Generating UnitSquare/CubeMesh from DMPlex object

All information required to build the function space is now derived from
the DMPlex object stored with the firedrake mesh. This currently works
only in serial with non-extruded meshes and it also changes the internal
facet numbering, but the UnitSquare/CubeMesh is now generated on-the-fly
and does not rely on the Fluidity interface anymore.
DMPlex: Generating cell->DoF mapping from DMPlex

This change enables higher order function spaces. It creates a
PetscSection describing the DMPlex->DoF mapping from the FIAT element. It
also adds a Vec of DoF indices to the mesh object that can be used with
the DMPlex and the dof_mapping to generate the DoFs of a DMPlex closure.
DMPlex: Marking all points in the Plex according to PyOP2 entity classes.
DMPlex: Reorder sections to create PyOP2-compatible DM/SF.

Reordering the default global and local section created from the
plex is required to sort DoFs into contiguous PyOP2 entity classes:
core, owned, exec-halo. The DefaultSF defining the halo-exchange
can then be derived from these, allowing the DM to perform the halo
exchange.
DMPlex: Creating Halo objects from DMPlex

We derive the receives from the associated PetscSF and the sends are
derived by gathering rank numbers via the PetscSF. The global_to_universal
numbering map is derived directly from the local and global sections
associated with the FunctionSpace.
DMPlex: Adding support for internal and external facets.

Internal and external facets are marked by Plex labels after
calling DMPlexMarkBoundaryFaces on the sequential Plex. From
these labels the auxiliary _Facets object can be derived.
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.