with_index : Iter(a) -> Iter((U64, a))
Returns an iterator that pairs each item with its position among the
items this iterator yields. The first yielded item gets index 0, and
the index only advances for items that are actually yielded.
expect Iter.fold(["a", "b"].iter().with_index(), [], |acc, item| acc.append(item)) == [(0, "a"), (1, "b")]
expect Iter.fold([1, 2, 3, 4].iter().keep_if(|n| n > 2).with_index(), [], |acc, item| acc.append(item)) == [(0, 3), (1, 4)]