Adds event loop to Engine::System.

Engine::System can now load in an entire systems-worth of objects and
render a single scene. Now, all we need to do is build the system
outward and start writing interacting things with it!!

Next: Removing Engine::TopDown2d because that can be designed by a
system description JSON and then inherited by a new system.

There are some TODOs that also plot out the next changes.

* Actor rules to respond to events.
* Interfaces and hud descriptions and tie those into event rules.
* Proper backend negotiation (we currently just assume SDL a bit, but
  that's not going to work in the future.)
* Remove glm::mat/vec templates from constructor input for Camera.
* Move Camera to World namespace (it doesn't interact with the backend)
* How the hell do we test anything in this codebase?
* Bindings.