Merge into next #2472 test runner returns 0 on failure

It was what I had guessed: a combination signal handler/atexit handler calling sys.exit() at normal exit. The solution was to test to see if we are being called by the SIGINT handler and only then call sys.exit().