Adds a task to the workflow.

        Returns self to facilitate chaining method calls

def add_task(self, fn, inputs=None, outputs=None):
        """
        Adds a task to the workflow.

        Returns self to facilitate chaining method calls
        """
        # self.tasks.append({'task': task, 'inputs': inputs, 'outputs': outputs})
        self.tasks.append(Task(fn, inputs, outputs))
        return self