Implement initial version of estimateDirectLighting()

For now, just take a separate BSDF sample for lighting instead of using
the one to calculate the next path vertex.
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 SampleVisibleSurface() function to Shape interface
Implement CalculateVisibleSurfacePdf()
Add SampleLe() function to Light and implement for DiffuseAreaLight
Implement GetLights() function for Primitive
Add ComputeF() function to Material
light WIP
handle multiple shapes
handle
rough implementation of sphere partial sampling
add square