Pull light-related functionality out of Material into its own interface

Feature-End: light
Add path type configuration option for PathTracer

Name the current path type "emittedLight".

Feature-Start: direct-lighting
Add SurfaceArea() function to Shape interface

Also add some utility functions to Triangle.
Move sampling functions to sampling.go
Add SampleSurface() function to Shape interface
Add SampleSurfaceFromPoint() function to Shape interface
Add Distribution1D class and a method to discretely sample from it
Add SampleLeFromPoint() function to Light and implement for DiffuseAreaLight
Implement GetLights() function for Primitive
Add ComputeF() function to Material
Add distribution to Scene to sample lights
Add direct lighting path type to PathTracer

Use it for the Cornell box scene.

Feature-End: direct-lighting
Add a command-line switch for the RNG seed

Feature: rng-seed
Add Cornell box with sphere light scene

Feature-Start: sphere-partial-sampling
Add ConvertToCoordinateSystem() utility function

Use it a couple of places.
Add uniformSampleCone() and uniformConePdfSolidAngle() functions

Also add MakeSphericalDirection() function.
Add configuration option for sphere sampling method
Implement sampling only the visible surface of the sphere
Implement fast version of sampling a sphere's visible surface

Feature-End: sphere-partial-sampling
Pass down shapes to sensors

Feature-Start: radiometers