Gracefully handle javac errors. Fixes #994.

When javac runs, it will run in a subprocess. If that subprocess fails,
the entire command should fail. However eval-in command throws an error
as the subprocess returns an exit code not equal to zero. The result is
that we end up with a messy stacktrace even if the javac command
explains why we failed.

This patch handles this by catching an eventual exception, but only if
it's generated by the subprocess. If the subprocess does crash, call
main/exit with the exit code we were given.