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 SampleLe() 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