Refactor BasicWorkflow and AbstractWorkflowEngine

This should create the start of an actual interface for
WorkflowEngine