Make Range::identifier_factory into a full standalone iterator
Mainly: Pull out the Range::identifier_factory (which was nearly an iterator) into a separate class and turn it into a fully fledged iterator named RangeIterator or ConstRangeIterator. The name change meant that many clients had to be updated. In some cases I have changed the usage to range-based for loop. Introduce cursory testing of this new iterator, demonstrating its use in an algorithm.