adding event system and making the camera listen

@vinioliveira for CR

This is an initial version of the Event system.

My inspiration: http://gameprogrammingpatterns.com/event-queue.html

Currently, the camera is listening to events and there's no new thread to consume the events. All is done by the caller. I think it's acceptable for the first version of it.
This is mandatory because GLFW is a C library so I can't pass C++ instance methods.