Subsystem restructuring. Please avoid merging stuff which would conflict with this. This took days to update.

some recent merges were lost due to entire conflicting files. I did ask nicely.
gc_destroyed is a datum/ var though, so typcasting isnt strictly needed.
As others have said, still best to make the var names more descriptive (at least)