Don't use Russian roulette probabilites in weights with backwards paths

Feature-Start: twpt-mis-basic
Keep track of middle ratio in TracerWeightTracker
Make Sensor.SampleRay() return a pdf value
Keep track of initial sensor weights in PathTracer
Relax restrictions on Sensor.ComputeWePdfFromPoint()
Rename lightMaterial to LightMaterial and move it to light.go

It will be used in PathTracer also.
Implement PathTracer.addVertexQs()
Implement ShapeSet.ComputePdf()
Add Light.ComputeLeSpatialPdf() method and implement for DiffuseAreaLight
Return surface information from Light.SampleLeFromPoint()
Implement PathTracer.addLightDirectionalQs()
Implement PathTracer.addLightSpatialQs()
Make Light.SampleRay() return a pdf value
Keep track of initial light weights in PathTracer when SampleRay is used
Make Light.SampleSurface() return a pdf value
Keep track of initial light weights in PathTracer when SampleSurface is used
Implement Sensor.ComputeWeDirectionalPdf()
Add SensorMaterial class which will be used by ParticleTracer
Implement ParticleTracer.addVertexQs()
Implement Sensor.ComputeWeSpatialPdf()