reworked handling of pseudo terminals and standard IO for jobs
FD clean up

Ensure FDs created in the Job machinery are properly closed in forked midground processes.
This means ensuring that FDs only for the master shell thread are closed in each child, and that
various other descriptors are set "close on exec".

Added a closeFdSafe, as sometimes the original standard out FD is closed already (not sure why!)
correctly close and clean up pipes used during pipelines

code now correctly closes "other" side of the pipe in children, and closes up everything in the parent
Add comment about file descriptor leak with Haskeline
reimplement Warp.run so that all sockets are closed on exec
move Warp settings out into Server start up code

new settings do two new things:
1) explicitly bind to 127.0.0.1, which is better for security, and removes the mysterious 'system' FD that bindPort & getAddrInfo induced
2) add logging for exceptions thrown in the server, which should aid debugging in the future