use stderr if it's not empty, previously it always picked stdout and the
error messages were being ignored. Also rewrote the error parser to
match "file:lineno: msg" and "file:lineno:colno: msg" formats with a
regex. The old could would throw exceptions in certian cases, causing
the error messages to be hidden.