Named queues

Introduced named queues as discussed in #8.

### Highlights

* Instead of having a queue per `vnode`, there is now a queue per named queue on each `vnode`
* The task hash passed to `enqueue` needs to include a `:queue` key
* The `claim` and `count-queue` calls now take a `queue` argument

Right now there is no garbage collection of named queues that are no longer used, so the overhead of a `ConcurrentSkipListSet` will be around until the process is restarted.

Fixes #8.
I cleaned this up to have the vnode return an error if it doesn't actually have the task instead of silently failing to update.