Improve accuracy of boolean operations
This MR improves the accuracy of the shape builder / boolean operations in two main ways: a per-segment rather than a per-shape subdivision threshold, and pre-processing of the intersections using lib2geom. The MR is correspondingly split into two commits, plus a preliminary refactoring commit.
The first of these changes allows seamless re-unions, i.e. pieces that were generated during a previous boolean operation can now be joined together most of the time without artifacts:
The second change improves the accuracy of the geometry by computing intersections to much higher precision, which gets rid of #4453:
I'd like to fix the other issues (e.g. #4477 and #4733), but that wasn't possible with these rather minor modifications. That will take some heftier rewriting and redesigning. Hopefully this MR will enable livarot to work acceptably well in the meantime.