Export Mesh vertex-groups to Lua as classes

SWIG can't properly handle object destruction for simple pointers
returned from wrapped functions, so make wrapper classes for
Mesh::VertexGroup and Mesh::VertexNormalGroup (as SWIG can't handle
nested classes) and export them as them as classes instead.
Parse negative rotations for -B/--background-orientation
snoghilite.c: Add -u/--upper-portion-only option
snoghilite.c: Scale all color components equally

Threshold detection is still done on a per-component basis, but when a
pixel is above the threshold in any component, all components are
scaled.

This avoids weird color fringing.
Add multiple-material support to Mesh class

To avoid adding per-triangle overhead, meshes are now divided into
"parts," one per material, and triangles are associated with a part.
Vertices, normals, and UVs are still global in the mesh, so triangles
in different parts can share the same vertices etc.  This adds a level
of indirection for accessing mesh-level data, but it doesn't seem to
make any difference in rendering speed.

Many mesh file formats use multiple materials in a single mesh, so
supporting this concept natively makes it easier to properly support
those formats.

The Lua mesh loading interface is now split into two different
functions, load.mesh (for loading entire meshes from mesh formats
which record materials as well as geometry), and
load.mesh_geometry (for loading a single mesh part from mesh formats
that only record geometry).  This is a little messy, and will be
cleaned up in the future.