Implement vec2, vec3, vec4, and quat as real classes.

- Add functionality to the vec2, vec3, vec4, and quat classes so that
  they can act as numeric types.
- Strip out the author's vector functions:
        vec2_add        vec2_diff       vec3_add        vec3_diff
        vec3_mul        vec3_dot        vec3_dot_vec3   vec3_length
        vec3_cross      vec3_dist       vec3_invert     vec4_add
        vec4_diff       vec4_dot        vec4_dot_vec4   vec4_length
	vec4_normalize	vec4_invert
- Rename the vector functions because the "vec4" arguments are really
  "quat"s:
        vec3_rotate_vec4        vec4_build_w            vec4_multiply_vec3
        vec4_multiply_vec4      vec4_conjugate          vec4_lerp
        vec4_slerp
- Begin experimenting with new safeNormalize() class method.
- Update code to exploit the overloaded operators for the vec2, vec3,
  vec4, and quat classes.
- Add "truncate" argument to the constructor which builds a vec3 from a
  vec4 to control whether the constructor treats the vec4 quantity as
  being in homogeous space of if the vector just gets truncated.
- Change of the remaining functions to take arguments which are
  references rather than pointers.  Also, declare if an argument is
  read-only (const).
- Change definition of MD5JOINT to use "quat" instead of "vec4".
Get rid of vec3_normalize.

Replace it with safeNormalize() method.
Change quaternions components from (w,x,y,z) to (r,i,j,k).

This step is to prepare the code to represent quaternions using a
scalar and a vec3 but we'll still retain the (r,i,j,k) aliases, even if
it means we can only do so via the "->" operator.
Prepare to replace the author's vector, matrix, and quaternion types w/my own.

- Change quaternion data members from (x, y, z, w) to (w, v).  This
  allows the quaternion class to leverage vec3 methods.
- Add conjugate() method to quaternion class.
- Implement operator==() & operator!=() for vec2, vec3, vec4, and quaternion.
- Implement aliases for "r", "i", "j", and "k" by overloading "->" operator.
- Swap #include order of "thread.h" and "types.h"; need AnimState to
  visible in thread.h.
- Change definition of "state" data member in MD5ACTION, and THREAD.
- Change vec3_lerp() to take arguments which are references rather than
  pointers.
Change vec2 to use an array to hold its data.

Also, implement aliases for "x", & "y" by redefining "->".
Change vec4 to use an array to hold its data.

Also, implement aliases for "x", "y", "z", & "w" by redefining "->".
Make vec3 x, y, & z data members private.

Wasn't able to successfully change vec3 to use an array.  Don't know
why.  Was able to do it before.  :-/