Introduce new `junction` plugin origin
This merge request implements the plan as outlined in this mail.
Beyond this, there is some additional refactoring in the earlier commits.
- Some methods which were declared private are now made public, as they were already being used illegally and were required to be public for this branch as well.
- The
_pluginfactory
module was reorganized again, pushing more code into thePluginOrigin
such that all domain specific knowledge about origins remains encapsulated in the individualPluginOrigin
implementations. - The
PluginOrigin
implementations have been split up into separate python files.