[relate][get_turns] move single_geometry to bg::detail, fix get_turn_info test

also create a preliminary version of relate::areal_areal (copied from linear_areal)
in get_turn_info test mutable begin() and end() because it seems that Range can't handle immutable Ranges
[relate] add support for non-simple non-equal Polygons in A/A.

Currently simple interrupt policy is used.
This approach works is there are IPs, Polygons are simple and not equal.
[relate] add support for no-IP casesin A/A, fix for_each_disjoint_geometry_if for Multi Geometries.

Fix a bug in for_each_disjoint_geometry_if resulting in assert failure if no turns are generated. This affects L/L, L/A and A/A.
Enable all combinations of Areal geometries.
Add ignoring of empty disjoint geometries in L/A and A/A.
Add tests for disjoint geometries.
[relate] add result interrupt check to no_turns_xxx predicates
[relate] fix GCC compile errors - hiding of template parameters and unknown identifier in not used part of the code
Merge branch 'develop' into feature/relate
[relate] Fix for_each_disjoint_geometry_if return value for Multi Geometries

Fix GCC warnings.
[relate] support simple, equal geometries in currently used, simplified interrupt_policy
Merge branch 'feature/relate' of github.com:boostorg/geometry into feature/relate
[relate] fix special case of L/L and L/A - going out and in on the same point but with different segment.

Linestring going into the exterior of the second geometry and then going inside on the same point. In this case the exterior wasn't taken into account. Now in addition to the Point, seg_id is checked. The check should also be faster since integral segment ids are checked before Points.
exit_watcher methods now take Turn instead of Point, seg_id and other_id.
Also added some tests for non-simple A/A.
[relate] rearrange updates of result in interrupt policy for A/A to show the handling pattern
[relate] Add HandleOtherTag to turns::less_seg_dist_op<>, change TurnAnalyser concept.

HandleOtherTag can be used to define how should the seg_id of the other geometry be used in comparison.
TurnAnalyser now must have two versions of apply(). One is called for it != last and the other one for it == last.
[relate] handle non-simple Polygons in A/A, NOT FULLY SUPPORTED

Not supported: i/i, non-intersecting rings
[relate] add code ignoring i/i turns, comment out some unneeded code in areal_areal
Merge branch 'develop' into feature/relate
[relate] added more tests for non-simple A/A with holes
[relate] add for now commented out ignoring of u/u turns in A/A, add some tests
[relate] Add support for rings with no turns and some special cases in A/A.

Add support for:
- single geometries for which no turns were generated
- rings for which no turns were generated
- i/i and u/u turns

TODO: some cases where turns are generated for the intersection of a "real" hole and a "fake" hole (self-touching exterior ring).
[relate] Add the support for IPs generated for "real" and "fake" holes.

Rename turns::less_seg_dist_op<> to relate::turns::less<>
It now takes the Comp defining how operations are sorted if segment and distance are equal.
Add 2 different operations comparators for L/L,L/A and A/A.
Add tests.
[relate] Fix wrong type in interrupt_policy for A/A.

Add tests for MLs/MLs, Ring/Poly, Ring/Ring.