protobuf_client fixes

1. Ensure that Connect() is called once
2. Ensure that reconnect's called quickly after each other don't just lock and wait, closing a newly established connection. The old code assured that only a single reconnect would be happening, but other's could queue up behind it, closing the newly established connection.