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.
Probably want this to be `chan *ClientResponse`, since it's not a small struct that's getting passed