Reconnect to discoverd when the connection drops

This method has multiple races:

- `reconnecting` is unprotected by a mutex
- Simply locking and unlocking `connMtx` doesn't actually remove any races, mutexes only work when they are protecting something.

I think we can drop this and instead wrap all access to the underlying RPC client with a `sync.RWMutex` (`connMtx`?)