engine: Support user-defined processing actions

* Move `processing_factory` out of the `WorkflowEngine` and into its own
  class. The majority of its operations can now be overridden by means
  of subclassing `WorkflowEngine` and the new, complementing
  `ActionMapper` and `TransitionActions` classes and defining
  properties. This way `super` can be used safely while retaining the
  ability to `continue` or `break` out of the main loop.

* The notion of defining bits of functionality as properties, takes away
  the need for tediously duplicating the class by making assumptions of
  what methods may have been overriden by the user. Only overriding by
  subclassing is now supported. Therefore `duplicate_engine_instance`
  was renamed to `duplicate`, which is now almost a stub.

* Introduce `eng.reset_callbacks_pointer()`.