Refactor state machine code
The aim of this refactor is to get the increment code separated from the rest of the state machine code, so each time control method can have its own state machine subclass. This also requires some changes so state machines can be destroyed and recreated, because we need to be able to create new ones when the user changes time control methods.
This PR should have all the requisite changes finished, so the next step will be actually implementing more time control methods. I'll plan to review it (along with some more testing) a little later, when I have a fresher mind.