replace all remaining `for` with `foreach` or `do`
make `for` parse as `foreach` does
port remaining `for` loops
auto merge of #8244 : thestinger/rust/for, r=huonw

There's some ugliness due to lacking external versions of the iterators in `librustc` and needing to manually implement returning from `do` with state in a variable. This should go away as they are implemented, with or without help from the compiler.