Move facet labelling before distribution

Unintended consequence of reordering change.  Facet labelling must be
before distribution, otherwise some interior facets will be considered
exterior.
Maintain global list of unique markers on exterior facets

When running in parallel, not all processes will have exterior facets
with all boundary markers.  Therefore, determining the unique list of
marker values from local facet markers is unsafe.  Instead, build
exterior facet objects with a list of global "unique" markers that are
guaranteed the same on all processes.  This is available as the
unique_markers property on a _Facets object.

Furthermore, move all facet building into one place.  Even if the local
process has no facets of a given type, it must still participate in this
marker determination.