Use Sidekiq's built-in retries and pass in args to before and after

- ```before``` and ```after``` blocks take in the same args as the ```perform``` block
- Instead of our own hacky retry logic, use Sidekiq's built-in retries--this means that jobs can "fail" if they throw an exception OR if their ```before``` block is not met!
some code duplication here and below, not sure how hard it is to share some stuff. I will leave it up to you if it is better to share something.