refactor cartoon geometry generation

the main reason for the change is to create a MeshGeom for each
chain (with non-zero trace residues). Putting all geometry in
one chain would be more efficient but we tend to generate too
many vertices to be addressed with an unsigned short.

as a welcome side-effect, the cartoon geometry generation code is
easier to read.
one MeshGeom per chain for trace render mode
cleanup 80col violations
remove a bunch of +0's
implement a proper outline render mode

it's not completely working for spheres and trace yet, but for cartoon
and tube it looks rather good.
invert faces of spheres

this fixes the outline render mode for spheres and trace
render styles
display message on browsers without WebGL support
increase outline expansion factor
implement zoom for firefox
set default strength to 1.0
improve normal interpolation

the previous (and suboptimal) normal interpolation creates intermediate
normals by gradually rotating the previous into the next normal. this
can lead to suboptimal visual results, especially in strands. the new
normal interpolation calculates a second catmull rom spline for
virtual atoms positioned at the carbon alpha atoms shifted by the
residue normals.
increasing detail level of 'low' quality setting