Rationalise utility meshes and add some more

Rationalise utility mesh construction (pulling it into a separate file to the main mesh class) and add capability to build non-unit squares and cubes (also rectangles and boxes).

For squares, we now also take advantage of new petsc ability to tell mesh generator to build a structured mesh: which means that `UnitSquareMesh(1, 100)` does what it claims, rather than making millions of elements.  Requires petsc4py (at least updates) but the firedrake branch works.

For 3D our instructions for building petsc don't allow us to interact with the generator options, so you don't get that.