Large graphics module patch

- Additional required extensions
	- ARB_map_buffer_range
		- MapBufferRange was already being used without any issue
		  on my machine, but init_graphics() now checks for
		  support.
	- ARB_multi_draw_indirect
		- We'll use MultiDrawIndirect for dispatching dynamic
		  draw commands.
	- ARB_sync
		- We'll use fences and sync features to make sure we don't
		  stomp on data that is currently being used
- Add draw.h and draw.c files
	- draw_buffer struct, used for generating indirect draw commands
	  to be drawn with MultiDraw* calls.
	- draw_cmd struct, a single draw command, mostly going to be used
	  internally for updating draw_buffer objects.
- Change ERRMESHMAP to ERRBUFFERMAP
	- Added new file map.h containing flags for BufferStorage and
	  BufferMapRange calls.
	- Updated error description returned from error_string()
	  appropriately.
	- Persistently mapped buffers see use outside of the mesh code,
	  so we need a more generic error code.
- Moderate changes to scene struct
	- scene_object data structure no longer a tree, but instead a flat
	  array. Might tweak this a bit more so scene_object represents a
	  virtual object (once again in a tree structure). It consists of
	  an index into the object data array, as well as parent, flag,
	  and transform information, and have the actual data exist
	  exclusively within the scene struct. This way we don't have to
	  do a bunch of pointer chasing when we want to update draw
	  command buffers and send out draw calls as fast as possible.
	  The basic idea is to decouple the scene management and scene
	  draw stages.