[test][is_valid] add more tests cases for polygon and multi-polygons
[algorithms][is_valid] factor-out in a separate file self turns computation
code (used by polygons and multi-polygons)
[algorithms][is_valid] implement predicate class that determines
whether a polygon or multi-polygon turn is acceptable (code partially
moved from algorithms/detail/is_valid/polygon.hpp)
[algorithms][is_valid] re-structure polygon's is_valid algorithm (for
readability and possible usage by is_valid for multi-polygons);
move code to sepatate files (to be used for multi-polygons as well);
move multi-polygon implementation to separate file;
[algorithms][is_valid] move multi-polygon implementation to separate file
[algorithms][is_valid] include is_valid for multi-polygons (coming
from a separate file now)
[algorithm][is_valid] Re-design complement graph implementation:
* complement graph is now templated by turn points rather than vertices
* vertices get the vertex_handle type from the graph now
* simplify DFS algorithm to use only parent vertex id instead of parent
  vertex (only the parent id is really needed)
The last change also solves incomplete type compilation errors on
darwin/linux clang++, when -stdlib=libc++ is set.
[test][is_valid] move validity check functions/classes and related
code to file test_is_valid.hpp; make testing more elaborate: for rings,
convert them to polygons and multi-polygons and test them as such;
for polygons, convert them to multi-polygons and test them as such;