Add Timeouts


Sometimes a stage A needs to accomplish its task within a given time. If not output is produced until a timeout the flow should be aborted.
Flow stages thus should optionally carry a timeout value, e.g.
Flow<int>.Do<string>(..., 1000).Do<string>(...)
If the first stage does not produce at least one output value within 1000msec, then the flow is aborted.
Maybe also a join could be equipped with a timeout. It could be interpreted in different ways, though:
a. The timeout fires if no input has been received since the flow forked.
b. The timeout fires, if not enough values have arrived within a timespan (since the first value arrived).