Refactor task execution loop to support progressively passing barriers.

Task execution loop "wait cycle" logic caused worker starvation in cases
with barriers executed after long-running tasks. Processes reaching
barrier value while all previously declared tasks were executing would
pause in wait cycle while currently running tasks executed if any tasks
were in a waiting state. This causes starvation when evaluation of the
barrier would allow new tasks to be declared and executed.

Refactor execution loop to allow "execute" command function to setup
external wait cycle loop by overriding internal execution wait cycle
limit. This external wait cycle may re-evaluate the barrier, accessing
new tasks.

This commit removes logic associated with task selection in the inner
execution loop, this may be reintroduced if needed.
Move set_jugdir to jug submodule to support programmatic jug init.

Move set_jugdir into jug submodule and break jugdir resolution logic
into separate resolve_jug options support function. Allows correct
resolution of jugdir for scripts directly initializing via `init`.
Refactor Task classes to extract TaskBase abstract class.