DMPlex: Build FunctionSpaces from one single GNN permutation

We now only build the Plex -> OP2 numbering permutation for
the mesh, which gets inherited by all FunctionSpaces to avoid
re-building sections for each FunctionSpace.

Note: Parallel currently breaks since we lose dof_classes.
DMPlex: Derive dof_classes to fix section permutation in parallel
DMPlex: Remove FunctionSpace._plex = Mesh._plex.clone()

This requires the DefaultSF associated with Mesh._plex to be
re-initialised with the global and universal numbering for
each FunctionSpace.
DMPlex: Optimising facet_cell derivation

We can now derive the cell renumbering from the Plex renumbering
and get rid of the O(n^2) loops (np.where(c==self.cells()))
required previously.