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

If this should be done in a `before_fork_hook`, why not just make these class-level methods?  That way it'll only be executed once, when the class is interpreted and then we don't need to care if we put initialization in a `before_fork_hook`.