Store window callbacks in a struct

This reflects the actual underlying implementation of glfw, where callbacks are assigned to individual windows. This should also make it easier to implement messages in the future.
Add newlines to end of files