Each pass re-diffed the whole map against the peer store to find its next
batch: a key slice and set for removals, a parse of every peer's allowed
IPs plus an FQDN write for modifications, and a lookup per peer for
additions. On a 10k-peer map that is roughly 34 full walks for one update.
The diff now runs on the first pass and produces a plan, and every pass
takes up to the cap from it, so a pass costs its batch. The cap now bounds
removals, modifications and additions together, which is what bounds the
time syncMsgMux is held.