The intent is that all Datastore changes are performed by these tasks that
sub-class off of Task. In this way the algorithms that update the Datastore
are controlled in one place.
Each task is passed only the parameters it needs to perform its task. In this way
various parts of the system can make changes from various contexts.
All tasks implement a create function that creates the task object and optionally performs
validation. It would set the bInvalid state if the create is not valid.
By default all tasks should override execTokenReq, an exec function that carries out the task.
The system will find and validate the token which can control what functions are allowed.
If no token is found the request failes (404).
If requiresToken is overriden to return a false execReq is called instead with no token check.
Bothe execTokenReq and execToken behave the same.
They return a result String (stringified JSON object) if the call was successful.
They return a null to indicate failure with no result. With failure it is assumed that
the nFailCode and sFailText values are set.
The nFailCode s/b a suitable value from the HTTP status code setting.
The sFailText s/b a short message with more information.
These fail codes are then relayed to the appropriate context that can report the error.