Protect protobuf client from simultaneous calls to reconnect()

Thanks to @freeformz for noticing this bug. Previously reconnect()
acquired a lock on entry, but that didn't protect us from a situation
where reconnect() is called twice in a row. The first time, a new
connection will be established but the second call will disconnect this
connection and open a new one. This can cause unexpected results since
the request sent on the first connection may not get a chance to receive
a response before the second call to reconnect() closes the connection.