Refactor geometry
Refactor geometry with the goal of speeding up the code and making it easier to mutate the geometry. It does this by separating the user-facing and internal representations of the geometry, so that both can be optimised to their domain.
This merge request also modularises the complete code base (each file is now its own module).
Edited by Michiel Cottaar