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.
Why use `FormatInt` instead of `Itoa`? Also, at this point it'd probably be more readable to use `fmt.Sprintf`