Mesh topology from DMPlex

This merge enables the creation of Mesh and FunctionSpace objects from PETSc's DMPlex topology abstraction. The DMPlex interface replaces legacy Fluidity code and allows standard meshes to be generated in memory, as well as providing on-the-fly domain decomposition in parallel.