If no argument is passed when emitting an event, the value is set to `undefined` instead of `null`.

Before this change, it was not possible to recognize null params from no params.
Implement GameState and GameStack to pass unit tests.

 - correct and add some unit tests
 - rename GameStateStack to GameStack
 - GameState can now takes any objects:
   `addLayer` and `addCallback` are merged to `addObject`.
 - add the `link()` method to `GameStack`.
 - add a key/value storage to `GameStack`.
 - ... and many other small improvments to the gamestack pattern.
Merge branch 'gamelogic' into dev