Hook up a nice type-safe events system

Something I'm playing around with as a simple and clean way to decouple
all of this Unity stuff from the gameplay code.

Pulled from http://www.willrmiller.com/?p=87, will add tests.
Got input and camera tracking working again

I'm caving to not trying to abstract everything about Unity, we really
need to just keep important logic out of MonoBehaviours. GameObjects are
createable at any time, including in tests, and there's no reason not to
use their references.

Camera tracks via the event system. May look into building
per-gameobject event lists as I kind of like the pattern of "hey you
game object, do this!" as well as supporting global messages.