Dual buffer with automatic switch. No performance hit for single process.
allow utilities in test_message_spec to be reused

km can be specified, but default behavior remains the same (global KM)
add basic print tests for kernel

tests new mp.Process behavior for PR #2734
use Session to protect from fork-unsafe sockets
use zmq to protect subprocess stdout after fork
add test for raising error in forked process
play nice with py3k

python 3 doesn't seem to like the parametric,
plus a few missing print parentheses
subprocess iostreams only send on flush
cleanup unused symbols in iostream

and add docstring / copyright
resolve rebase conflict

s/sub_channel/iopub_channel/
workaround Windows lack of fork in subprocess tests

simple Process(target=f) doesn't work for interactively defined f.
allow disabling subprocess pipe
disable subprocess pipe in inprocess kernel

because it isn't using zmq anyway
subprocess outstream forwarding doesn't work on Windows
add mission io
flush on newline in subprocesses

reduces issues with mp.Pool
allow adjustable subprocess flush limit
ignore error waiting for pipe flush message
Merge pull request #2791 from minrk/forksafe_nomp

forward stdout from forked processes

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

closes #2438