Refactor spec to find expired keys in redis rather than mocking it.

This is in prep for moving the expiration into a lua script, where
the old way of testing would not work.
Move expiration logic into a lua script.

This is in preparation for moving the mark_as_complete
logic into lua; expiration is one part of that.
Refactor mark_job_as_complete interface to accept a qless job arg.

This is in preparation for moving the `move_job_as_complete` logic into
lua. The lua script will need the job metadata in order to complete the job,
and thus needs the job itself and not simply the jid.
Move `mark_job_as_complete` logic into lua to gain atomicity.
Make lua script complete the job, too.

This ensures that these things are atomic.
Ensure the JobNotPendingError is raised before the job is completed.

Otherwise, we can wind up in an inconsistent state.
Address cane failures.
Allow rbx failures.

Rbx is hard to keep green :(.
Address rspec deprecations.
Re-organize lua scripts.
Refactor: extract error handling.
Merge pull request #46 from seomoz/use_lua_for_batch_expiration

Use lua for batch expiration