Fix bug with child program's time limit

- Previously, the limit passed to execute_process() limited the amount of CPU
  time it could use, not real time.  This meant that programs could take
  much longer than that, particularly if they were blocking.
- Now, an alarm is set soon after the child process executes, and the signal
  handler uses this alarm to terminate the child.
- Thus, the time passed now represents the real-time limit on the process.
  It is expected that this is more likely to be what the user expected, though
  perhaps in the future both can be used.