Remove SM-Aware requirement from Forward plugin

This is based on discussions in #4314 - essentially, the main reason that controllers are ServiceManagerAware is because it was the only way to have workflow-aware plugins such as the Forward plugin. Or so we thought.

On analysis, it's far simpler and easier to inject the ControllerManager instance directly into the Forward plugin on creation, as it allows us to remove quite some code, and remove the requirement that controllers be ServiceManagerAware in order to forward.

This PR modifies the Forward plugin to accept a ControllerManager instance via a setter, and adds a ForwardFactory that does this. Tests have been modified as the internal workflow was able to change and be simplified (much of the work done was validating the controller, and this is handled by the ControllerManager now).