Add scaffolding for TwoWayPathTracingRenderer

Also add scene configs that use TwoWayPathTracingRenderer.

Feature-Start: twpt-basic
Add Scene.SampleLight() helper method
Add TwoWayPathTracer class that does basic path tracing and direct lighting

It will later be made to do light path tracing.

Hook it up to TwoWayPathTracingRenderer.
Implement light path tracing for TwoWayPathTracer

It will be hooked up to TwoWayPathTracingRenderer later.
Add SampleConfig.CombineWith() method

This will be used to generate a SampleConfig that can be used for any
light.
Hook up light path tracing to TwoWayPathTracingRenderer
Move sensor/light path tracing logic into TwoWayPathTracer
Move weight calculation deeper into TwoWayPathTracer
Add HasSpecularDirection() method to Sensor and implement for all Sensors
Take into account sensors with specular directions
Take into account maximum path lengths when calculating weights

Also specify the specularity conditions to handle in the future.

Feature-End: twpt-basic
Make Light.Sample{Surface,Direction}() return a pdf value
Add a configuration option for two-way path weights

Name the current one "uniform".
Keep track of the denominator for the pdf ratio for light paths
Factor in direct lighting and adjoint pdf into pdf ratio for light paths
Return surface information from Sensor.SamplePixelPositionAndWeFromPoint()
Add Shape.ComputePdf() method and implement for all shapes
Implement ShapeSet.ComputePdf()
Implement Sensor.ComputeWeSpatialPdf()
Implement Sensor.ComputeWeDirectionalPdf()