preliminary work for failure backend shared examples

Hey! So I took a shot at making some shared examples like we talked about in #916. I thought I'd share what I'd have so far to discuss what changes in the API we'd like to make. 

* .all vs. .each, should we pick one or the other? couldn't you just enumerate over .all? I think I'm fine with having both, but can .all always return all the failures and not have a limit argument?
* .remove in base takes one argument, but .remove in redis_multi_queue takes two. this
   doesn't seem to quite work out since the .remove is called in failure.rb like this:

   ```
    def self.remove(id)
      backend.remove(id)
    end
   ```
* same problem with .requeue, that's why there is no test for these methods in this patch yet. :)
* self.url doesn't seem to be used. Should it stay?

Let me know if you have any thoughts, and I'll keep working at this. Thanks!