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.
you can set it to 0 to turn it off.
Although, admittedly this was originally a design element from a previous version before var/can_fire existed.
I only really kept it because I was toying with the idea of having fire() adjust processing_interval itself based on lag... in the future maybe.