Update `ErrorHandler`, match Sanford error handler

This updates the `ErrorHandler` to behave similar to Sanford's
error handler. It takes an exception, a daemon data and an
optional job. This is because the error handler is called if any
exception occurs while handling a payload and a job may not have
been parsed when the exception occurs. The daemon data's error
procs are called and passed the exception, daemon data and job.
If an error proc raises an exception, the new exception will be
passed to any subsequent error procs and the last exception that
is thrown will be logged by the daemon. This is to avoid any
errors being "hidden" and behaves the same as a bunch of nested
begin-rescue-end statements.

@kellyredding - Ready for review.