Large patch to engine and graphics, core libs

graphics
========
- Add shader object
	- Creation, read from file/string, compile, link
	- Must manually bind program with UseProgram (will create wrapper
	  for it in engine render code soon)
- scene.h/.c
	- Add generate_scene_draws()
		- For now this really only copies data from the array-of-
		  structs object data into the given draw buffer.
		  Future changes will rework object data into a struct-of-
		  arrays and this function might be removed entirely, if
		  the draw buffer and scene are merged into one object.
	- count/max fields of scene struct no longer prefixed with
	  'scene'.
	- scene_object => scene_node, added new scene_object struct
		- Scene objects are the data used to draw scene nodes.
		  Scene nodes are virtual representations of entities
		  within the game world. Nodes are used in the management
		  (housekeeping) phase of scene operations, i.e. creating,
		  removing, rearranging nodes. This phase modifies data
		  within the objects arrays, which is then used during the
		  draw phase.
		- scene_object data includes per-object data like model
		  transforms and that object's draw command.
	- Add simple create_scene_node() routine.
		- Created node simply has one instance to be drawn. Mesh
		  and draw data need to be modified by hand.
- mesh.h/.c
	- Add destroy_static_arrays_buffer(), primarily for ease of use.
	  Can probably macro-ize this since it just calls DeleteBuffers on
	  the object's single GL buffer.
	- mesh_buffer struct now stores array of MAX_BLOCKS mesh struct
	  elements, to store information about meshes loaded into the
	  buffer. One mesh per block, so max order and min block size
	  need to be tweaked a bit in the buddy memory implementation.
	- Add GENERIC_DATA and BAD_BLOCK block types.
		- GENERIC_DATA used for when a block is allocated but
		  we don't know what kind of data it has yet.
		- BAD_BLOCK used when an error occurs but we don't know
		  how it should be handled.
	- do_coalesce() returns an int, e.g. -ERRHIGHORDER when a block
	  of MAX_ORDER is coalesced.
	- Add do_split(), splits any given block (doesn't need to be a
	  pointer to an array of MAX_BLOCKS elements like some routines
	  require.)
	- Add find_unused_block(), finds a block of a given order in
	  an array of MAX_BLOCKS elements.
		- Doesn't create/destroy blocks, simply searches through
		  the array in a linear fashion for a match.
- draw.h/.c
	- vertex_count field of draw_cmd struct renamed to count. This
	  is an index count, not the number of vertices drawn.
	- size field of draw_buffer now GLsizei
	- zero_draw_cmd() macro moved to draw.h

engine
======
- Render subsystem
	- Add init/deinit routines (declared in render.h, defined in
	  render.c)
		- These functions initialize all graphics resources the
		  engine needs, like shaders, scene and draw buffers, etc.
	- Add primitives render pass
		- Might rename this; it uses a front shader with no
		  texturing.
	- Add create_scene_grid() subroutine (incomplete)
- Include and link to PhysicsFS
- Add resource dir definition for use in PhysicsFS when debugging
  various resources that need to be loaded. Won't add this directory
  to the search path in release builds, as resources will be installed
  along with the executable.
- Add init/deinit_gl() subroutines to clean up code in init.c
- Add global data for use in engine, e.g. primitives buffer & scene

core
====
- New error codes, see error.c for descriptions in error_string()
	- HIGHORDER
	- LOWORDER
	- SCENECAP

Future changes/concerns
=======================
- Might remove block types all together and use MSBs in the order field
  of the mem_blk struct to signify usage state of blocks. The memory
  implementation shouldn't care what kind of data is in it, just that it
  is in use. Mesh buffers, however, should.
- Still have work to do on getting scene/draw buffers working together