Implement range syntax

Closes #19794

r? @aturon for the first patch
r? @nikomatsakis for the rest
I had a bit of a discussion about this on IRC and the consensus was yes it makes sense (although basically only to use `take` on) and that looping forever was probably what you would expect, rather than stopping at the max int (it's also more efficient).