Solve issues with very large number of failed items

The methods requeue_failed_item() (when calling in a loop) and
get_and_flush_items would stress Redis very hard when the number
of failed items is very high (e.g. 100,000 or more).

This is solved by doing moving the failed items to a separate list
and process them in small chunks in an efficient manner.

This impacts the API also:

 New method: remove_failed_items()
 Changed:    requeue_failed_items()  (old API still supported)
 deprecated: requeue_failed_item()
 depricated: get_and_flush_items()

The depricated get_and_flush_items() uses the new method
remove_failed_items() under the hood, so is sae (performance wise),
but the returned values are inconsistent with get_and_flush_items().