shell/job: fix job_by_id segfault on empty list
shell/task: fix background tasks making the shell exit
shell/task: destroy terminated jobs
shell/task: add pipeline bang
shell/task: add async tasks
test: add subshell assignment test
shell/task: fix subshell exit status
shell/task: fix last_status
shell/task: add pipelines
shell: document subshell_fork
shell/task: add function definition
shell/task: add case clause
shell/task: add for clause
shell/task: add loop clause
shell/task: add if clause
shell: fix subshell_fork error return value
shell/task: add proper builtin support
shell/task: implement work tasks
shell/job: add job_wait_process
shell/task: re-implement very basic shell
shell/task: remove

This will get replaced with much simpler code.