Some shader fixes.

- Made const parameter real const.
- Removed redundant gstate update in main loop. It is called when the
core updates.
GUI button uses EBO instead of triangle strip

- BUTTON added to vbo and vao the m_* prefix.
- IMAGE does not need m_uni_mat (it's provided by inherited class).
Finally, PERFECT (?) label bbox calculation.

- The label bounding box calculation is now working correctly.
- Button handles click when mouse RELEASE, not PRESS.
- Some BUTTON setters. TODO: think about when does the label need to
update.
- Fixed main screen label positioning.
State magic.

- Updated TODO.
- GSTATE now holds a map <str, state>, this way we can refer to states
as strings.
- Added STATE_CHANGE event. Holds a string, reference to the new state.
Label now saves time by not reuploading glyphs when not needed.
Added SHADER MANAGER, started GUI API for primitive batching

- SHADER MANAGER is cool. You ask for a string identifier, you get a
SHADER_PROGRAM pointer.
- Fixed includes. Now GLOBALS.hpp includes GLEW and then GLFW. Useful to
avoid GLEW fuckery when including GLFW before.
- Compile shaders at startup.
- Started GUI API to batch primitives.