Reconnect to discoverd when the connection drops

Let's call this `ConnEvent`:

```go
type ConnEvent struct {
    Status ConnStatus
}

type ConnStatus uint8

const (
    ConnStatusConnected ConnStatus = iota
    ConnStatusDisconnected
    ConnStatusConnectFailed
)
```

And since the struct is so small, you can pass it by value into the channel instead of by pointer.