Implement range syntax

Closes #19794

r? @aturon for the first patch
r? @nikomatsakis for the rest
Urgh, yes, kinda, the problem is that then it can overflow. I think I should just comment better that this is the magnitude of the difference and that we assume a > b (I could debug_assert that)