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).