Add sentinel support to IteratorRange
As of C++20, range based for
supports that the end
iterator has a different type. This allows to implement
so called sentinels tagging the end. This can make it
simpler and more efficient to implement ranges where
it's not straight forward to get the end in O(1) or
where comparing real iterators is expensive.
To support this approach, this adds support for using a
different type for the end iterator to Dune::IteratorRange
.