Implement fast derivation of P1 coarse cell to fine dof map

The map from coarse cells to fine dofs is isomorphic to the P2 map on
the coarse mesh.  This is significantly faster than the previous pure
python implementation, taking less than half a second to build a map
from 1280000 coarse cells to 2563201 fine dofs (in comparison, building
the coarse mesh in that case takes around 20 seconds).
dmplex: Annotate all numpy array declarations with ndim and mode="c"

Makes indexed access marginally faster since we don't go through
"strided" array accessors any more (but rather C-contiguous ones).
Implement prolongation of P1 fields on triangles
Implement restriction of P1 fields on triangles

We restrict by computing a lumped projection of the fine field to the
coarse space.  To do this, we exploit that when the coarse cell is
pulled back to the reference cell, the fine cells always look the
same (since the refinement is uniform).  As a result, we can precompute
the coarse cell basis functions tabulated at the fine cell integration
points and then run over the mesh computing the RHS for the lumped
projection (u_f*phi_c*dx).
Implement injection of P1 fields on triangles
Add multiplication by detJ in residual restriction

We need to weight the restricted residual by a factor of the size of the
big cell relative to the small ones.  This is basically just 2**tdim.
Sketch of hooking up PCMG to solve Poisson problem

Run with, e.g.

    python poisson_mg.py -pc_type mg  -ksp_rtol 1e-10 -pc_mg_levels 7 \
      -pc_mg_levels_ksp_type richardson
WIP, sketch of hooking up FAS

Needs petsc4py mods, and petsc bug fixes.  Haven't yet got the hang of
driving things, but seems to sort of work.