Allow saving wall connections
Refactor loadFrom
Rename loadPCDFileXyzNormalFloat to loadPCDFileXyzRgbNormalFloat.

Because it also loads colours.
cloudFromFile: Error if there are no points
Pull out constant
Make sure IDs loaded from a save file don't conflict with existing IDs.

We do this by bumping the ideas of loaded objects over nextID.
Rename variable
Make sSelectedPlanes IDs instead of Planes.

This makes sure we don't accidentally refer to old data.
Allow moving planes around
biject: Use pattern matches instead of `error`.

Pattern matches give better error messages with source locations.
Move `biject` to its own module
biject: Use IntMap where possible
Room position optimisation: Solve one system for each connected component.

Fixes unconstrained ("free") rooms being moved to 0, infinity,
or whatever the least squares solver picks for free variables.
Make the use of `catchSingular` more granular