Separate out callbacks (glfw-specific and general)

Add the final callback, keyCallbacks, to the Callbacks struct.

Separate out glfw callback logic into a separate module.  Use glfw's window
user pointer to store a pointer to the object that contains the Callbacks
struct.