Propagate unhandled Throwables

An outer catch block handles these and calls System.exit(1), allowing
scripts to consume the exit code.