Refactoring (simplification) of new I/O implementation.

Now uses 3 main classes: OutputDmux, InputMux and Input. Documentation
inc. Data streams uses Begin and End tokens to allow various number of
output to target the same input, yet letting the later know when it
won't receive anymore data, letting the transformation's thread die.

The "one item queue" as been replaced by a hardcoded (Begin, {}, End)
stream sent to the unplugged inputs, as those inputs are most probably
inputs from producers, and that unplugged inputs from other kind of
transformations have high chance to be a user error, it would probably
make sence to let the base producer class do it, and raise an error
while harness validates() the graph.
Sends the Begin token through all outputs before thread start.

We can have a concurrency problem if the transforms handle the sending
of Begin token at the same time they initialize() because if for one
reason a transform runs a lot slower than another the input can be
killed before every candidate had a chance to register. On the design
side, this change is annoying because it adds even more "data" knowledge
(or at least metadata/control flow) to the thread object.
Adds test case for Input, fix bugs found while writing it.
Small output format tuning in examples.