Update executor: more generic abstract interface

The interface was leaking part of the swf backend implementation. These
changes shrink the abstract interface to:

- .submit()
- .run()

.replay() was renamed in .run() because it enforces a specific semantic.

Methods related to the swf backend and its replay semantics were moved
to `swf.executor.Executor`.