Feature/segment iterator

This PR proposes a const iterator for iterating over the segments of a geometry.
The supported geometries are: linestring, ring, polygon, multi-linestring and multi-polygon

Design-wise, the segment iterator keeps track of a point iterator for the supported geometry.
Once `operator*` is called on the segment iterator, then a segment object is created on the fly and returned to the user (using the current point iterator and its successor). To be precise the segment returned is a `boost::geometry::referring_segment` defined over a const point type (the point type of the geometry).

The proposed segment iterator is currently bidirectional.

**Motivation:** in the distance algorithm code, I need to create an R-tree based on the segments of a geometry. To do this I need access to the segments of a geometry, but without creating/copying the points.
Quite a few questions here.
The classes `range_iterator_begin` and `range_iterator_end` are used to handle open/closed rings. I can certainly move the code somewhere else. Also related to my comment about regarding the `detail::segment_iterator` namespace: they could go there.

Regarding the class `range_segment_iterator`: is used for both rings and linestrings. It should not be in `boost::geometry` namespace but rather in some detail namespace (see other comments above).

Regarding the `segment_iterator` and `segment_iterator_type` classes: I need to think a bit more whether they can be merged. I also prefer a name that reflects that the iterator is const. `const_segment_iterator` is one, and I am also thinking about `segment_const_iterator`. Why one would you prefer? I think I prefer the `segment_const_iterator` (it puts the emphasis on the `const_iterator` part rather than the `const_segment` part).