librustc: WIP patch for removing `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.