Feature: Behaviors

This moves game object logic out of `GameObjects` children, and into children of `Behavior`. This does a number of things for us:

* `GameObject.createFromYaml` becomes much much simpler.
* An object can have multiple `Behavior`s on it.
* A `Behavior` can be added to an object after it is initialized.
* Scripts that don't take `onInitialize` arguments can now actually have an `onInitialize` method that is called after all yaml loading is complete.
* Decoupling scripts and objects paves the way for a polymorphic scripting system.

Down sides:
* This is very much a code breaking change. You can see the required changes to Sample Game [here](https://github.com/Circular-Studios/Sample-Dash-Game/compare/feature;Behaviors).