Introduce transactional job processing

Under heavy use, especially with failures, process restarts, and network issues, kue would often get corrupted.  The root cause was that kue does not transactionally change state - so if a change went part way through and an error occurred the data structures would be in an inconsistent state.
This change turns the critical path internals (state change and job dequeuing) to be transactional (or, at least as close as can be achieved using redis).
Some notes on this:
- This requires redis 2.6 (it uses lua scripting)
- When dequeuing jobs there are still some conditions where it's impossible to achieve atomic dequeue-and-execute semantics.  So, there is now an error handler which is called to notify the queue processor when this condition occurs.