job/shell: Refactor os_call_shell/os_system to share code
job: Refactor how job kill timeouts are handled

Use a timer to periodically compare the current HR time against the HR time of
when `job_stop` was called. After 1 second, send SIGTERM, after 2 seconds, send
SIGKILL. The timer is only active when there's at least one `job_stop` call
pending.
job: Fix job_wait to properly cleanup the job when it exits.