DMPlex: Always build a vertex numbering

Since this calls the collective types.FunctionSpace() it should not
be done inside any conditionals.
DMPlex: Loop over all ranks when building Halo

We need to loop over all ranks when exchanging `remote_sends` in order
to avoid hanging if we have empty partitions.
Merge pull request #219 from firedrakeproject/fix/empty-partitions

Fixes to avoid hanging if we have empty partitions in parallel.
Apply the patch in issue #149 correctly.

The line new_vtk << function in io.py
was meant to be replaced by
new_vtk << (function, self._time_step).
Add support for top and bottom facet zero form integrals.
Add support for extruded exterior facet integrals.
Add horizontal facet integral with temporary fix for avoiding double jacobian kernels.
Attempt to add interior vertical facets.
Interior facet integrals for zero forms.
Add changes to support the sparsity building for horizontal facets
Top, bottom and exterior vertical facets pass.
Eliminate extra global args not needed for new FFC kernel types.
Use ON_TOP, ON_BOTTOM instead of magic numbers.
Eliminate bottom_set from _Facets constructor. Drop use of kwargs.
Fix flattening of the coefficients.
Add comments on sparsity domain building. Remove reordering of integrals.
Re-implement changes for #118 for new domain types
Tidy existing tests, and un-xfail
Laplace and Poisson tests for facets, using Neumann BCs
Add interior facet stress tests (P0 and P1DG steady advection)