librustc: Remove `for` desugaring

WIP for #15392 to get early feedback. This is missing the trans support, but has everything else (I believe). Do not merge yet.
On this comment, add a note to the effect that "the return type represents the concrete element type `A` of in the `Iterator<A>` that is producing the for loop's elements"