Start of low-level multigrid support

Add functionality to create map from coarse cells to refined cells in a
mesh.
Add computation of consistent orientations

Compute a consistent orientation of both cells and vertices of the fine
cells in the coarse to fine cell map.
Implement creation of coarse to fine cell_node_maps

On triangles, we can automate the creation of a coarse to fine cell node
map for any nodal basis with a bit of trickery.
Only label facets if mesh is not already distributed

Labelling exterior facets is only possible in serial (where the boundary
of the mesh really is the boundary).  If we're creating a mesh from an
already distributed plex, we don't want to relabel the facets.
Add functionality to filter labels on refined meshes

Plex refinement marks all points "underneath" as a refined entity with
that label.  But we only want marked facets on the refined mesh to carry
labels over, so add ability to remove these labels from other entities.
Add MeshHierarchy and ExtrudedMeshHierarchy

The former takes an existing mesh and refines it uniformly a specified
number of levels.  The latter builds a sequence of extruded meshes on an
existing mesh hierarchy.
Save cell and vertex orientations in mesh hierarchy

This will be necessary when we come to build function space hierarchies.
Add basic hierarchies of function spaces

These are basically just bags of function spaces on each level.
Add ability to get restriction and injection weights
Add code constructing PyOP2 kernels for restriction, etc.
Add special-casing for P0 cell_node_map on extruded meshes
Add Function hierarchy
Add grid transfer operators on function space hierarchies

Excepting the P0 case (which is special-cased), we ask FIAT for the dof
weighting and construct appropriate Kernels.
Expose grid transfer operators on function hierarchies
Build mesh hierarchies on non-overlapped meshes

So that the halos don't grow too large, we refine the non-overlapped
mesh and subsequently grow the halos on each level.  This allows us to
build reasonable multigrid hierarchies in parallel.  A consequence is
that we must postpone most of the mesh construction until we know we're
not going to build a mesh hierarchy.  This is transparent to the
user (the setup callback is called when building a function space or
similar).
Add sketch of solving P2 poisson problem with linear GMG
Add sketch of solving P2 poisson problem with FAS
Add FunctionHierarchy.assign
Also support u.assign(0)
NotImplementedError when trying to refine non-triangle mesh