make `for` parse as `foreach` does

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.