Closes #22, all of the subsystems are split out into their own files