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.
You are right. Bruno had posted a comment about this when the variant support for `assign` was under discussion. I am quiting here what Bruno wrote:

> Basically, concept checking can only be done once you have a concrete geometry. Apparently right now there's a specialization for variant that does nothing and thus allows the free function check to pass. I don't remember having written that so I need to check but it looks a bit hacky: check in free function, potentially doing nothing if it's a variant, and then check again in resolve_variant to have the concrete geometries properly checked if a variant was passed initially. It's better to have everything done at one place, and that's possible only once the variants (if any) are resolved. So the workflow is: resolve variant -> check concepts -> resolve default strategy -> dispatch. So this is litterally "as early as possible", at least if we don't want to hack around. I know it can make the error messages a bit less clear. Does that impact them heavily on MSVC? Regards Bruno

So I will fix this according to the rule above.