This can deadlock if we try to send to a watch that is attempting to `Unwatch`. Two options:

```go
// drop updates that would block while sending
select {
case ch <- update:
default:
    // this will be hit if the send would block
}

// drop updates after blocking for a timeout
select {
case ch <- update:
case <-time.After(time.Millisecond):
    // this will be hit after the send blocks for a millisecond
}
```

The only other option is to require watchers to drain the channel in a goroutine if they're going to lock `l` or not receive for a while.