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.
if `listenForClientsRequests` is always going to be started at initialization, we can just use the [init](https://golang.org/doc/effective_go.html#init) func to start it up always. This is especially true if we can move this file out to its own package.