Continue improving MD5 as a proper C++ class.

- Miscellaneous change of type declarations from "blah" to "const blah".
- Better use of initializer lists for constructors; mostly this cleans up
  a lot of calls to memset().
- Use compiler generated "blah &operator=(const blah &)" to clean up
  many of the uses of memcpy().
- Replace even more array implemented as unstructured memory
  (malloc/calloc/realloc) with std::vector instances.
- Better leverage std::vector's abilities by taking advantage of
  push_back() and back() methods.
- Delete unused vector methods:
  o vec4_add
  o vec4_diff
- Add missing version of DirectionalLight::get_direction_in_eye_space().
- Add missing copy of color and type data members to LIGHT copy constructor.
- Add missing copy of spot_fov in SpotLight class copy constructor and
  assignment operator.
- Leverage default constructor when resizing std::vector<MD5MESH> to
  remove initialization code from application code.
- Leverage default constructor when resizing std::vector<MD5ACTION> to
  remove initialization code from application code.
- Optimize MD5::get_action(), and MD5::get_mesh() methods by moving
  loop invariant code outside of loop.
- Move initialization of vao into a new MD5MESH method.
- Modify signatures for MD5::set_pose(), MD5::blend_pose(), and
  MD5::add_pose() to make their correct use more apparent.
- Give name to MD5 enumeration type (MD5Method) to improve debugger output.