Report errors directly, instead of parsing the string given to ihputStrLn

Still use string parsing for parse errors (there must be a better way to get the source location of a parse failure)
Fix error reporting: use the right id to report back by installing
a catch block just after the id is set in the IState record
Merge pull request #662 from hannesm/error-cleanup

Error cleanup