input: Use internal structs to hold input events

Internal input callbacks will store static, private data that holds
info about the event. This struct can then be used to dispatch
events to user callbacks, or Lua functions
Additional internal callback code
input: Add Lua key event dispatch

Add lua_cpcall wrapper, to keep the actual lua_State protected.

Might need to move a lot of Lua-related code/headers into a more
centralized internal header, since Lua is a core dependency
core.c: wb__lua_cpcall now returns value
window.c: Formatting, warnings fixes
window.c: Add mouse_button dispatch