Feature/counting algorithms

This feature contains the following modifications:
* Re-factor counting algorithms: `num_points`, `num_segments`, `num_geometries` and `num_interior_rings`: this refactoring involves moving common code to a separate file `algorithms\detail\counting.hpp` and a new namespace that I called `bg::detail::counting`. As part of the re-factoring, the `num_points` code in the `multi/algorithms` directory was also moved in the `algorithms` directory.
* Add variant support for `num_interior_rings` and `num_geometries`.
* Add unit tests for `num_interior_rings` and `num_geometries`.
* Implement `num_points` and `num_segments` for boxes of any dimension: to do this I implemented the Boost.MPL-based metafunction `ipower` in the `bg::util` namespace that computes the power of an integral constant at compile time (there is also a unit test for this metafunction). As part of this change, the unit tests for `num_points` and `num_segments` now test for boxes of dimensions 3, 4 and 5.
Why do we have the boolean flag add_for_open?

For points it makes sense. We count the number of points and want to count the closing point too, optionally. 

Let's give an example:
A triangle consists, as a closed polygon, of 4 points. 
As an open polygon it consists of 3 points.
To make num_points compatble for open/closed, we added a boolean flag "add_for_open" which let the num_points function always return 4.

A triangle consists, as a closed polygon, of 3 segments
A triangle consists, as an open polygon, also of 3 segments, because it is deliberately not closed by a point but the segment is still there.
Therefore I don't understand the need. I think it should go.