Implement range syntax

Closes #19794

r? @aturon for the first patch
r? @nikomatsakis for the rest
IDK - is deriving clever enough to add bounds on generics like this?