wip: fix require-system broken functionality
This fixes broken
require-system mechanism and adds a few system classes to make the design cleaner. Change passes all tests (with minor fix which reflects system change, that a preloaded system is always loaded – by definition).
This lacks a regression test suite and proper documentation (I'll work on that next weekend). Please don't butcher it by merging individual commits, especially before it's finished.