Refactor to include less stuff directly in ActiveJob::Retry but use Retrier classes

Refactor all the things! This should make it epicly easy to customise.
Yeah, the `nil` behaviour of `retry_exceptions` is annoying but is a sensible default. Don't know how we could represent that better :/