An abstract base class for task implementation. Implements internal logic of task prerequisites, nested tasks and deep task retraction. Implements intrusive ref-counting and so can be used with TRefCountPtr. It doesn't store task body, instead it expects a derived class to provide a task body as a parameter to `TryExecute_ method.