Reworking a large portion of heightmap code

Signed-off-by: Paul Holden <paulholden2@gmail.com>

- Reworked and fixed roughness function, was calculating wrong row
  index (Y-coord of patch). Now properly checks average elevation
  difference between edges and corners. Differs slightly from technique
  being implemented here, but for now it provides an accurate enough
  roughness factor for patches.

- Added new functions for adding indices to the heightmap buffer. In an
  ideal implementation this index buffer would not be attached to the
  heightmap; the heightmap mesh would be generated in real-time based on
  viewer distance, point, etc. and fill the contents of an index buffer
  object that provides a generic interface, but can use orphan, persistent
  mapped buffers, etc. Might be preferable to have an object that can
  append variable numbers of elements with a single function call since a
  patch will be drawn by no fewer than 6 (corners, complete fan, restart
  index) and no greater than 11 (center, corners, edges, complete fan,
  restart index).

- Added a refinement matrix to the heightmap struct. Stores refinement
  information for patches (stored at what would be the ostensible center
  of the patch) in a matrix.

- Added a Y matrix, that stores preprocessed height values for the
  heightmap. This is filled by a successful hmap_init() call, providing a
  faster way of accessing point elevations. Using the hmap_point()
  function was ridiculously slow, especially since the technique requires
  propagating elevation data upwards so that patches that would, from a
  trivial pass through hmap_roughness(), seem smooth but have rougher
  sub-patches can generate meshes of appropriate resolutions so its
  sub-patches don't lose important detail. Still could be quite slow; an
  alternative is to create a roughness matrix to store similar to the
  refinement matrix, and store roughness of a patch at the index of its
  center. This pre-processing overhead seems unavoidable, but can be done
  on worker threads before generating meshes for dynamically loaded
  heightmap patches.

- Added a smaller heightmap patch to test things on a scale a little more
  friendly on the eyes and thought process.

- Add function to calculate sibling patch indices, and associated enum
  values for which patch to calculate. Added an error code
  HMAP_PATCH_OUT_OF_BOUNDS for patches that are on an edge or corner.

- Adjusted heightmap shader to use the new, smaller heightmap that wasn't
  generated with specific scaling values in mind for each of the RGB
  channels.