tools/nycr: Make nycr generate parsers which have no global static state

This means we can parse two things at once and have correct line/column numbers, as well as the correct list of errors.

Also switch from yylineno / flex's automatic line number tracking to our own because flex forgets to initialize it's variables when using a string buffer....
ThrowSystemError is a noreturn function
jhm: If a program which is run for a job is newer than the job, re-run the job