handle task dependencies with non-locking atomic operations
refactor: move WPP thread local data into its own data structure