Mostly comments about how to solve the task.
Handle grad(f('+')) in ChangeToReferenceGrad.grad and make propagate_restrictions translate n- to n+ so we only have to compute one of them.
Add MinValue and MaxValue types.
Add Cell/Facet-EdgeVectors types for internal usage.
Implement change_to_reference_geometry for a bunch of geometry types.

CellVolume,
Circumradius,
Min/MaxFacetEdgeLength,
Min/MaxCellEdgeLength (new types),

should all now work, however some testing is in order.