re-wrote Job classes + added onAdd/onFinish, reworked related classes and
tests to reflect these changes