dispatcher: use read/write lock since connections can change now
dispatcher: use read/write lock since connections can change now

Previously, the connections array would always live in the same place,
only its contents would change.  Now a re-alloc can change the location
of the array, hence we need to separate read and write operations, such
that writes to the array don't cause invalid reads.

Skyscanner/carbon-c-relay,piotr1212/carbon-c-relay,Skyscanner/carbon-c-relay,rtoma/carbon-c-relay,zzl0/carbon-c-relay,grobian/carbon-c-relay,lyft/carbon-c-relay,rtoma/carbon-c-relay,grobian/carbon-c-relay,lyft/carbon-c-relay,piotr1212/carbon-c-relay,lyft/carbon-c-relay,tjamesturner/carbon-c-relay,piotr1212/carbon-c-relay,tjamesturner/carbon-c-relay,zzl0/carbon-c-relay,grobian/carbon-c-relay,piotr1212/carbon-c-relay