Architecture change

Split the different subsystems (GPIO, logging, etc) into separate
classes.

This allows a bit better management of one aspect of the program, since
each aspect is in one place, with triggers setting off each aspect's
part of the code.