This follows std::advance interface and also allows to use distance types other than iterator's difference_type (if the iterator supports that).