add iterator_difference(TODO rename constructor)