Investigate using Lenses for Space manipulation

(Incomplete Feature, Investigate , Priority: Low, Test Status: No automated tests yet , Reported By Justin du Coeur, )
Summary: The Space code has a bunch of slightly-messy structure-rewrites. This is exactly what Lenses are good for, so we should consider using them.
Investigate using Monocle, shapeless and scalaz. Much of what we are doing is inside Maps -- do either of these Lens interpretations actually help?
Pay attention to performance! This is fairly central code, so slowing it down much is not acceptable! It isn't so messy that a slow Lens implementation would be worthwhile. (But performance may be fine, so it's worth considering.)