Preparatory changes for out queues

This change means that each output chain will have an associated deque
allowing us to track data output separately for each output. This is
dramatically more flexible and seems to have the same performance
characteristics as not having it. In addition, this will allow us to
register and unregister much more easily for output/input. Children of
the interface can choose to ignore the deque with only a slight memory
and performance hit and if they choose to use it, then this simplifies
the data store and manipulation.