dmplex: Type annotate missing variable
dmplex: Correct 2d array indexing
dmplex: Declare numpy arrays with mode="c" and appropriate ndim
Merge pull request #419 from firedrakeproject/dmplex_types

* dmplex_types:
  dmplex: Declare numpy arrays with mode="c" and appropriate ndim
  dmplex: Correct 2d array indexing
  dmplex: Type annotate missing variable
Dispatch on C/Python Expressions based on "eval" attribute

It's not safe to check for a .code attribute in an Expression and assume
it's a "C kernel" one, since the user may have subclassed expression and
called the superclass __init__ method.  Instead, check for eval and
assume that if it exists we have a Python Expression.
test case for constant times dx on extruded meshes
Merge pull request #421 from firedrakeproject/extruded-constant-dx

* extruded-constant-dx:
  test case for constant times dx on extruded meshes
Save mesh radius for embedded n-spheres
Add optional distribute flag to mesh creation

If distribute is False, the mesh is already distributed and we should
not do so again.
Stash a vertex numbering on the mesh
Remove unused mesh._cells array

We only need the cell classes.
Create empty interior facet object with kind "interior"

Previously we used "exterior".
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.