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
Add moveAllRooms
fitCuboidToRoom: Disconnect old walls
Add duplicateSelectedPlane
Make finding corners from 3 planes a Maybe (could be parallel)
TranslationOptimizer: Also return RMSE and print it
Add houseSetup
biject: Improve docs
Make lstSqDistances return Maybe and warn on singularities in optimizeRoomPositions
Allow individual wall thickness for each "Opposite" wall connection
Add menu for setting wall thickness
Extract setMoveTarget
Add enumAll function
Allow setting MoveTarget via menu