Add an optional overall wall time limit

Some problems have a large number of test cases to correctly test all
edge cases. So far our support for that has been purposefully subpar
since we want to encourage problem writers to be more efficient with
runner time so we can have certain guarantees regarding how much time
people should wait before getting their results back. Nevertheless, some
test cases are not generated by the problemsetters and are instead added
verbatim from their original source, so it becomes hard to enforce this.

This change adds an optional per-run wall time limit. Any cases that
finish after this limit will get TLE as their status with a time of
zero. The overall run time will be the wall time limit to avoid
confusion.