Add TiledMask2
Fix sync issue with initializing MergeSceneElement

After the first thread begins initializing the offsets array, other
threads were seeing that "offsets != null" and immediately started
using it.  This change ensures that the offsets member variable remains
null until it is ready for use.
Fix Y-scale calc for ReinhardToneMapperFactory
Check incoming ray against shading normal
Remove unused code
Grayscale pixels have range from 0-255
Expose image height/width in pixels (RasterMask2)
Add missing method-override Javadoc comment
Make DiscGeometry tex coords in range [0, 1]^2
Make sphere tangents consistent with tex-coords
Remove trailing whitespace in PolyhedronGeometry
Compute tangent vectors from texture coordinates
Add method to automatically recompute zero-normals

Scans normals for vectors near Vector3.ZERO and recomputes them as the
average of the adjacent face normals.
Base NormalShader on shading normal
Remove trailing whitespace
Change orientation of AngularEnvironmentRayShader
Add modifiers for normal maps and bump maps

- BumpMapModifier is based on a grayscale height-map
- TangentSpaceNormalMapModifier accepts a texture where the RGB colours
  (in [0,1]^3) map to the normal in tangent space (i.e., the normal is
  u*(r-0.5) + v*(0.5-g) + n*(b-0.5).
- ObjectSpaceNormalMapModifier accepts a texture where the RGB colours
  (in [0,1]^3) map directly to the corresponding normal in object space
  ([-1,1]^3).