Reader interface

event: 'data'
event: 'eof'
method: pause()
method: resume()

Writer interface

method: write()
method: close()
event: 'drain' (if write() cannot send all the data, 
                it will be queued and the 'drain' 
                event fired once it completes)


stdin - reader
stdout, stderr - writer
tcp, unix socket - reader and writer
childProcess.stdin - writer
childProcess.stdout - reader
pipe()[0] - reader
pipe()[1] - writer