Command refactor

Refactored the project so that commands.go is in its own sub-package, and there's also a db sub-package which keeps the redis pool as well as some other helper functions.
So the bug I was seeing came about though the following commands:

```
QLPUSH foo 1 job
QLREM foo 1
QRPOP foo
```

Which would remove the item from the itemsKey, but not from unclaimed. So when you QRPOP it would return the eventID (1) and a blank string.

So adding that check fixes it because it won't remove from itemsKey unless it was actually removed from claimed. We could also bail on that and remove from both claimed and unclaimed, but that adds an LREM to the pipe, and an LREM on unclaimed (which could be pretty large) is probably not something we want to do as often as QREM is going to be done.