GameContext extension support

This commit adds some work on extending the GameContexts to be extendable from the outside without the need to be derived (and therefore made harder to create by the engine).
Contexts can now be set with 5 types of function taht describe certain events:
* OnActivate - called when a context has been pushed as the active context
* OnDeactivate - called when a context is being swapped for another active context
* OnCreate - can only be passed to a context when it is created, and is called in its constructor
* OnDestroy - called when the context destructor is called
* OnUpdate - called on each update before the actions are updated
These functions can be set within a script or in winmain or by another context or even entities (although this is not recommended).

ActionLogic typedef changes to receiving the entire GameContext instead of individual references. This is to allow action functions to modify the state of the game (if required) and access other entities in the (TODO) EntityCache by their ID.
Add some examples of action logic.

A couple examples of how actions should work. It still needs more timing info though.