Implement range syntax

Closes #19794

r? @aturon for the first patch
r? @nikomatsakis for the rest
Note, we've long had this iterator: http://static.rust-lang.org/doc/master/std/iter/fn.count.html

This notation will just serve to make it a bit more convenient. I'm hoping that we can drop many of the bare `fn`s in `std::iter` in favor of this notation.