task: Pass the workdir directly into the TaskMaster

The TaskMaster clearly wants the workdir as we do get_parent, so simply
pass that in.
builtin: Require a snapshot path

This removes one unnecessary use of JsonDB.
snapshot: Add a simple helper utility to load a snapshot from a file