#96: feat(async): rebalance a full pool across the nodes
Reconcile only evicted connections to dead nodes and refilled the pool up to max_size, so a full pool was never touched again. A node that returned to Online (or joined the cluster) got no connections at all, and the skew lasted until one of the pooled nodes died:
nodes=[i1 i2 i3], max_size=6 => pool=[i1 i2 i3 i1 i2 i3] i3 goes Offline => pool=[i1 i2 i1 i2 i1 i2] i3 is back Online => pool stays 3/3/0, refill does nothing
Now reconcile ends with a rebalance pass: it counts free and in-use connections per candidate and migrates one connection from the most loaded node to the least loaded one.
One rebalance loop does a limited number of migrations, and leaves the res t to the next refresh, so a topology event does not trigger too many reconnections at once.
Closes #96 (closed)