syntax/rustc: Improve error message for misuse of `for` loop

r? @brson As per #3651, print out a clearer error message when a `for` gets
used with the wrong type of iterator. Also fix spans on `for` loop
bodies, and suppress some more derived errors.