2c87b15e83
An instance of Task tracks a single thread of activity that is part of a Job. While the docs already use this terminology of tasks being composed of jobs, the code did not have an object to represent these semantics. Now it does: * A task t is initialized with a root activity, which is its name * t can t.Enter() and t.Finish() an activity, building a stack of activities * t's code can get a logger t.Log() whose logTaskField is set to the concatenated stack of activities * t's code can update IO progress it made since leaving idle state * t's code's log output vie t.Log() is captured since leaving idle state * FIXME: find a way to bound that buffer refs #10 refs #48