Robot rules

My unofficial hackathon project :)

Will allow us to dynamically decide what we want to do with jobs -- for now clear, retry, retry, retry with incrementing the retry attempt count extra. Criteria include job class, error class, error message, etc.,and a possible expiry so we don't become dependent on it.

Silo peeps: it can also be used in conjunction with Swappable to send BSC jobs to the API if processing them normally fails with a certain error.

Be aware that this is a public PR.

I still have to add a couple tests but wanted people to see this before the weekend.

@davidann @tony-bye

It needs to be run before every fork. This is because if the Damnl ever changes, we want to update it in the parent process. Otherwise, every time it is used in a child process it will download the rules from redis again.

Note that this incurs an extra `redis.get` once per fork.