Feature/mesh renumbering

Adds ability to provide reordering for meshes for better sparsity patterns (and cache behaviour, we hope).

Slightly slows down mesh generation, but not too bad.  (Maybe 5%).

In minimal testing gives noticeable performance improvement:

e.g.
```python
m = UnitCubeMesh(30, 30, 30)
V = FunctionSpace(m, 'CG', 2)
f = Function(V)
a = f*dx
m2 = UnitCubeMesh(30, 30, 30, reorder=False)
V = FunctionSpace(m, 'CG', 2)
g = Function(V)
b = g*dx
parameters['assembly_cache']['enabled'] = False
assemble(a)
assemble(b)
%timeit assemble(a)
100 loops, best of 3: 10.3 ms per loop
%timeit assemble(b)
100 loops, best of 3: 12.3 ms per loop
```

Which isn't too bad.