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

According to http://ruby-doc.org/stdlib-2.1.1/libdoc/time/rdoc/Time.html#method-i-parse, it appears that `parse` only throws `ArgumentError`.  Maybe replace with,

```ruby
self.expiry = Time.parse(self.expiry) rescue nil
```
?