Fix deadlocks in readProcessWithExitCode

The problem is in the exception handler in readProcess. When it receives
an asynchronous exception, it tries to clean up by closing the pipes.
However the attempt to close outh blocks because the reader thread
(reading with hGetContents) is blocking on the handle.

See https://ghc.haskell.org/trac/ghc/ticket/8343 for the corresponding
ticket for the process package.
Add a readCreateProcessWithExitCode function for each readProcessWithExitCode
Merge the process reading functions into one generalized function in System.Process.ListLike.
Add new output type [Chunk a] in System.Process.Chunks
Add unit tests and an interactive program for testing lazy process output