Workers can throw checked exceptions

I've also taken the chance to refactor the worker out into its own project, where it should already have been!
Merge pull request #28 from michaelmarconi/worker-checked-exceptions

Workers can throw checked exceptions