Code and test for unpacking map workflows into dags.
Tests for discover-tasks.
Topological sort of the DAG.
Intercept map workflow and unpack.
Ingress queues will always be a map now.
Do :self for input queue for parity.
Take vals & concat for ingress, same as egress.
Use vals to make the refactoring a little easier.
Each consumer reads in a go block. Ack early.
Don't run ack on its own thread in the pipeline.
Take all read messages with :message, and optionally :input
Reserve space in ZooKeeper to perform sentinel reduction across all inputs.
Locally cache each sentinel UUID per input on the peer.
Consumers are closed in read thread.
Fix ingress start methods.
Don't call it a tail batch until all sentinels have been learned.
Don't read from exhausted inputs.
Adds a test for streaming joins.
Retrofit aggregate to work like transformer.
Fix queue bootstrapping.