Create formal split between runtime and backend in workflow interface
In the initial release of the workflow interface, the LocalRuntime has two backends that can be used that define how the experiment is executed on a single node: The default option is to launch all tasks within a single process, or parallel execution with the Ray library (by setting LocalRuntime(..., backend='ray'). While only two backends are defined for the LocalRuntime today, there should be clean separation between these for future expandability.
This task involves creating and documenting a Backend interface, and refactoring the LocalRuntime (and any additional Runtime implementations) from the backend (i.e. a LocalSingleProcessBackend or LocalRayBackend ). This will lead to cleaner maintainance of code, and help external contributors design new backends for the project.