Add `Worker` class; parses job, finds handler and runs it

This adds a `Worker` class that handles parsing a job, finding a
handler class for it and running the handler. The worker is called
when a job is pulled off the queue. The worker is responsible for
properly logging the process of running the job and for handling
any errors that occur. This provides the next layer for processing
background jobs and events.