adapt TransportExecutor to be able to create and run tasks dynamically

and streamlined the Task interface and usage
because the concrete implementations have just conveinience methods added to them. The interface for the user of the Result should always be TaskResult