Make DelayedJob objects more useable by the system.

Return `self` when calling `display_name` on a payload object if that method definition takes an argument.
Return `self` when calling `perform` on a payload object if that method definition takes an argument.
Add a few state-gather predicates:

  run_pending?
  currently_in_progress?
  permanently_failed?