Implement job / process control according to libc documentation

Follow the libc documentation in accordance with process and job
control.  Although I plan on extending this functionality to support
parallel pipes, this provides the correct matching functionality for
existing shells.

This also adds a dependency on the Omni native PHP extension, which
provides some additional native C functions which are not available
through the POSIX or Process Control extensions.
Lots of work on Omni
Save before Pipe rework
Add Endpoint class for wrapping native system pipe
Pipes now working for single commands
Add more code to prevent native pipes being held onto
Piped commands are now working properly (with a few minor exceptions)
Fix bug with waitForJob returning true when it shouldn't

Also add command simulation and "wait for remaining jobs" logic when
exiting shell
Builtins now working and user friendly formatter implemented
Handle SIGTTIN on standard input pipe controllers & show original commands
Add 'cd' and 'ls' (not implemented) builtins
Returned structured data from ls / cd
Change pipe command to be a builtin
Add script for testing transmission of FDs at runtime
Implement pipes that support modification after launch
Reading from stdin now works correctly again
Ensure pipe processes are killed when jobs fail to start
Omni application scripts now work (inc. non-interactive background jobs)
Ensure process IDs are tracked when exceptions are written
Nested scripts now executing correctly