added a notify system for consumers per queue

Since `client.queues` is a slice you're actually sending a reference across the channel here, meaning there *could* be a race condition if another client operation changes the queues or if whatever is receiving this string does. It'd be safer do something like:

```go
queuesCopy := make([]string, len(client.queues)
copy(queuesCopy, client.queues)
respChan <- queuesCopy
```

It won't be *that* much more inefficient, it's not actually allocating and doing a byte-by-byte copy of each string, it's just copying a reference (but go strings are immutable so it seems like a copy)