per-app start pipelines/handling

This allows a single node to accept streams of start requests for different
applications in parallel, and respect their individual timings/hesitation.
Previously one stream of starts would block another with its own hestitation.

(also: some package restructuring and cleanup.)