Put the Item class in a separate header; give it functionality
to create itself from Variants (e.g. from the configuration data)
and to run itself (do whatever the item is supposed to do).
This makes the polymorphic approach unnecessary: we just have
items that are sufficiently smart.
This moves do-a-thing to the Item, while the Job now has one
job: be a loop around creating Items and running items.