Implement prioritized queues.

This pull-request implements numeric priorities inside queues.

Priority is either defined by an `Integer` or a `Proc` that takes the `#perform` method arguments as its own arguments, and it's defined on the `sidekiq_options` call. An example would be:

```ruby
class HeavyWorker
  include Sidekiq::Worker
  sidekiq_options priority: -> (account_id) {
    Account.find(account_id).vip? ? 0 : 10
  }

  def perform(account_id)
    # Do some work.
  end
end
```

Lower priority value items are picked up first. Same priority value items work on a FIFO basis.

I've made sure the fetches are atomic, the tests pass, but the only couple things I'm not sure are:

- Latency (because the last item in the list might not be the last one inserted.)
- Migration path (current queues will have the wrong data type in Redis)


@mperham could do with some feedback regarding these points (and the whole PR in general.)