Generalized systems to be singletons

Systems were already getting too cumbersome, so I made them a bit more
general.  Add an interface for them and some code to iterate through all
systems.