Implement initial version of estimateDirectLighting()

For now, implement a sampling method to just take a separate BSDF sample
for lighting.

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

Also add some utility functions to Triangle.
Move sampling functions to sampling.go

Also have them return pdf values.
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
Implement direct lighting sampling method that samples a single light
Use the oneLight direct lighting sampling method for the Cornell box scene

Feature-End: direct-lighting-one-light
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
Add uniformSampleCone() function
Add configuration option for sphere sampling method
Implement sampling only the visible surface of the sphere

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

Feature-Start: radiometers
Add PointShape class and use it to remove RadianceMeter's origin field
Make output of RadianceMeter more descriptive