Implement range syntax

Closes #19794

r? @aturon for the first patch
r? @nikomatsakis for the rest
Might as well implement `ExactSizeIterator` as well.