Keeping DataFlow::Proc unaware of the item and metadata for the moment.
DataFlow::Item will carry the data and metada, and it will be a simple value-object.
DataFlow::Channel (for lack of a better name right now) will be a 'glue' between DataFlow and its processors. A Channel will manage the input and output channels of a running processor. This should NOT break the existing code, it should happen all transparently.
DataFlow will have to be adapted, mostly regarding the output method. It must allow to return the array of DataFlow::Items, for those interested, or a default output bringing only one specific channel (or 'default' channel if none is specified).