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.
This code seems mysterious; my internal alarm bells go off when I see `0` just lying there.  But I guess I don't have much of a suggestion on how to improve it (e.g it probably is not worth attempting to introspect the enum's type definition just to verify that it only has one type parameter  -- someone who attempts to make their own `iterator` lang item is just going to have to learn to make their system's type definitions compatible with our own).

Still, adding a comment above the definition of `enum Option` in libcore pointing out that there is a hidden dependency over here might not be the worst thing in the world...