Creating a BatchJob

A BatchJob class is responsible for determining what work needs to be done within the run, and for splitting the work among ThreadWorkers.