adds a job factory interface for materializing jobs from custom sources

uses property setter to inject factory and minimize API changes.