Small changes in the way updates are propagated down to actions.

GameContext now has input, logic and render methods.
Derived contexts should implement onInput and onLogic if they want to do anything specific in those cases.
The default input and logic methods collect the input events and update the logic.
The render method just calls update on the registered render action.
This is done so that multiple updates can happen, but with a single draw after it.
Beggining of code refactor for Timer classes.
Add class for RNG and change Timing classes.

Add Random class which wraps around the Mersenne Twister number generator.
Change the way Timing classes work:
- get current system (extern) time from time sources
- GameClock polls extern time sources and advances it's own time based on that
- timers are created directly in the clock and referenced by ID, and can be given a callable object to be called when the timer expires