implements qonos.job.failed notification

- qonos.job.failed notification is sent only if the following criteria
  is satisfied.
  - If the job status is updated to CANCELLED
    OR
  - If the job status is updated to ERROR (AND)
    if the number of retries exceeds the max retry count (OR) if the
     current time exceeds the  hard_timeout.
- qonos.job.failed notification includes the error message to the job
  payload if it is available while updating the job status.
- modified existing tests to test the send qonos.job.failed notification
  scenario.
Merge pull request #305 from venkateshsampath/qonos_job_failed_notification

implements qonos.job.failed notification