adapt TransportExecutor to be able to create and run tasks dynamically

and streamlined the Task interface and usage
I wonder if the newTasks and execute(tasks)  funcion should be in a SubExecutor interface or something like that and then TransportExecutor can implement them both?