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.
we might consider making functions for each of the individual keys, so we don't have to remember how to form them all.