[geometry] added ring/polygon rescaling
[geometry] Work in progress: rescaling to robust-type
A robust type is integer for float/double. The rescaled points will only
be used for side-information and equality and distance-comparisons, not
to calculate the intersection points themselves.
Currently the code is #ifdefed
Merge branch 'develop' into rescale_to_integer
Merge branch 'develop' into rescale_to_integer
[geometry] Propagated rescale_policy further / from earlier phase
[geometry] Use robust determinant for comparisons
This breaks one extra testcase which should be verified later
[geometry] Work in progress: factor (rational) instead of distance

This is a large commit. It replaces enriched.distance with factor. Factor
is based on integer calculations, calculated in cart_intersect, from the
passed robust points, so always trustable.

We had to do this because without certain tests failed because of FP
problems with distance (calculated with FP).

This commit also greatly simplifies relate_collinear, where most things and checks
are replaced by simple unified calculations. This is also based on robust
fractions (but could have been done earlier).

Many (but not all) testcases commented in previous commit are now uncommented
again, they now work thanks to the fractions. There are also testcases
uncommented which now work correctly using clang/Linux

This commit breaks compiling disjoint (because of rescale), and running buffer
(also because of rescale), and some more (probably all because or rescaling),
this has to be fixed soon after.
[geometry] Bugfix in rescaling, points may not be const& (of course)
They were initialized from local variables and returned
[geometry] Let rescale derive from not_implemented as is new style
[geometry] Collinear touch now also uses new unified method
This fixes the holes_intersect_and_touch case
NOTE: method should now be renamed, not ...two_intersection_points
[geometry] Modified #clips, caused by fix in touch
(note: this was modified to 4 in 9a9efcff89fb081babfc31f8a34cfb2c80386974,
18 dec 19:19:10 so this is effectively a reversal)
[geometry] removed segment_equal, now all collinear go to one fuction.
Function now renamed to segments_collinear, and the other to segments_crosses

We calculate opposite now only in "direction", where it is used to pass through.
That one also checks on equality

Test 5103 now (or with previous action for touches) also passes again.
[geometry] Removed (need for) arrangment and moved disjoint.
Disjoint is now based on ratios too. All is now based on ratios, greatly
simplifying the original code with many lines and conditions.
[geometry] big cleanup removed old code from cart_intersect
[geometry] replaced boost::rational with segment_ratio which is more specialized for our needs.
segment_ratio contains specific methods (on a segment the ratio is [0..1]) and
can be based on double or float too (Boost.Rational cannot do that).
Boost.Rational is still used under the hood for comparisons (which will be
made more efficient later)
[geometry] Avoid using Boost.Rational for all comparisons
Only if values are close, we resort to Boost.Rational (for int) for exact comparisons.
This avoids most conversions.
[geometry] Slightly increased tolerance for the r.e.s. test
[geometry] Let has_intersections also rescale
[geometry] Remove sanity check as planned
[geometry] Instead of (non-rescaled) append, we clean rescaled dups afterwards.
We don't do it on the fly to avoid additional rescaling, it is done only once per point
This also changes occasionally some number-of-points in testcases (now more cleaned)