A device connects on the first call that reaches it, and on the
Barebone backend that can take a while. Follow every discovered
device's connecting and connected events into a ConnectionActivityCenter
keyed by device id, holding the current stage, its fraction, and how
long the stage is expected to take. StageDurationMemory learns the
duration of each stage from what it observes, so a frontend can pace a
progress bar over the expected time rather than jumping between stages.