added peeking, new client handling via channels, fixed command bugs

I finished adding peeking. This is basically just what pop does but doesn't remove any items. I think we can probably clean this up by making a like "getEventDetails" that at least does the `HGET` for both pop/peek.

The new changes in client make things a bit cleaner. I also think this gets rid of the racey conditions with the client handling using channels.

I changed a bunch of stuff in commands that were causing bugs (ya, we need tests :/). I also made the func `queueKey` correctly use parts and changed it to not put brackets around the name of the queue.
:sheep: Nbd, but usually we'd break up long lines like this into multiple, like:

```go
client.requestChan <- ClientsRequest{
    client: client,
    name: "setQueues",
    value: queues,
    respChan: respChan,
}
```