ATM reconnect as needed, but only with a single go routing at a time

Also, use sync.Once to ensure that the connect logic is only called
once. This is currently a race in the mainline client.