More notifications

Lets make notification better.
- Notification is now a class we can instantiate
- add `Notification#metric_gauge`
- on each error_rate calculation, send metric_gauge for **error_rate**, **failure_count** and **success_count**
- add `Notification#notify_warning`
- notify a warning if the sleep window is smaller than the time_window
- force **sleep_window** to equal **time_window** if it is
too short.

There are multiple places in which you initialize the notifier repeating the same logic. This should be abstracted into

`def notifier
@notifier ||= @notifier_class.new(service, partition)
`