Clean up LAMP/LIGHT code; use vec functionality better.

- Tweak rinterp() to leverage linterp().
- Fix default value for truncate in the vec3/dvec3 constructor.
- Add vec "conversion to bool" operator.
- Clean up LAMP (Chapter 10) and LIGHT module.
  o Fix AttenuatedPointLamp::push_to_shader() to call
    PointLamp::push_to_shader() rather than LAMP::push_to_shader().
    Make the analogous change in LIGHT module.
  o Change various parameter lists to pass references rather than pointers.
  o Change get_direction_in_eye_space(), get_position_in_eye_space(),
    and get_direction_in_object_space() to return a result, which
    allows us to shorten the parameter list.
- Fix eyeposition bug in chapter4-5, chapter5-3, chapter5-4, and
  chapter5-5.  This bug was caused by using vec3_multiply_mat4().
- Replace initialization of vec2/vec3/vec4/quaternions using
  initializer lists with constructors.
- Continue changing various function signatures to use references
  rather than pointers.
- Use unary minus
- Use mat template class method m()
- Use vec template class method v()
- Add vector version of GFX_translate()
- Replace use of memcpy() to initialize vec4 with using a constructor:
    memcpy(&this->position, &position, sizeof(vec3));
    this->position.w = 1.0f;
  vs
    this->position = vec4(position, 1.0f);
- Replace vec4_multiply_mat4() with overloaded '*' operator:
    vec4_multiply_mat4(position,
                       &this->position,
                       m);
  vs
    *position = this->position * *m;