forward stdout from forked processes

third attempt, in collaboration with @piti118

uses zmq instead of multiprocessing, because mp has too many issues.

- messages are sent via PUSH/PULL from subprocesses
- messages are sent at flush time, not at write time
- subprocess messages
- no threads, no sync events, etc.

some basic tests are included

todo:

- [x] test on Windows
- [x] resolve issues with inprocess kernels