Refactor|libgui: Streamlined GLState's interface somewhat
libgui: Added Drawable, a combination of buffers, programs and states

Drawable is a tool for managing the interconnections between buffers,
programs and states. Possible use cases:

- draw a single buffer with a program using the current GL state

- draw a single buffer with one of many alternative programs

- draw multiple buffers with the same program

- draw some buffers with a custom GL state and the rest with the
  current state

- draw a mixture of multiple buffers and programs, each with a
  custom state (e.g., a set of 3D sub-models representing an object
  in the game)