max_retry on fail

I had the use case where processing an item was failing every time: `queue.fail(uid)` was putting the item back into the queue indefinitely.
Based on that, I added a feature to be able to tell how many times the items should be added back into the queue before going into a FAILED queue permanently to avoid any infinite loops.

Using `max_retry=X` when using `fail` ensures that this scenario cannot happen.

Let me know what you think
Thanks