It looks like all callers currently do either:
    `DynamicTasks.queueIfPossible(task).orSubmitAndBlock().getTask()`
    `DynamicTasks.queueIfPossible(taskFactory).orSubmitAndBlock()`

If that's the use-case (because we don't want to lose the task), then perhaps that should be the top-level method and us not expose `TaskQueueingResult`.

If we did that, then that's one less use of `TaskWrapper`. I still don't see the use-case for that.