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.
I'm wondering, what's the purpose of this class template? Only to handle closed/open rings or do you plan to reuse it also somewhere else than in `segment_iterator<>` implementation? Why all mechanics wasn't implemented/dispatched in one place?

Or rather why isn't this class called `segment_iterator<>` since AFAIS range_segment_iterator is the type defined by `segment_iterator_type<>` and returned by `segments_begin/end()` functions. Then why is the `segment_iterator<>` needed? To always refer to non-mutable Geometries? If the answer is yes I'm not sure if this is a good approach. It's inconsistent with the `point_iterator<>` isn't it? It should probably be possible to refer to mutable Geometries. If not, then maybe it should be called `const_segment_iterator<>`?