Add flags type for PathVertex

It will be used mainly for direct lighting and direct sensor sampling.

Feature-Start: bdpt-mis-direct-lighting
Propagate DirectSample{Light,Sensor} setting to PathVertexContext
Use separate subpaths when direct sampling is used in BidirectionalPathTracer

This is necessary since some methods work on the entire subpath instead
of just the last few vertices (for example,
PathVertex.ComputeExpectedWeight()).
Add flag indicating when direct lighting is used in PathVertex

Add validateConnecting{Light,Sensor}Vertex() functions and check that
flag in validateConnectingLightVertex().
Use the right pdf values when direct lighting is used in PathVertex
Add flag indicating when direct lighting weights are used in PathVertex

Check this flag in validateConnectingLightVertex().
Re-enable direct lighting for all BDPT scenes

Feature-End: bdpt-mis-direct-lighting
Turn off direct sensor sampling when direct lighting and power weights are used

The somewhat tricky integration will be handled later.

Feature-Start: bdpt-mis-direct-sensor
Add flag indicating when direct sensor sampling is used in PathVertex

Check that flag in the validate*() functions.
Use the right pdf values when direct sensor sampling is used in PathVertex
Re-enable direct sensor sampling for all BDPT scenes

Note that it still won't be used, since direct lighting and
non-uniform weights are still used.

Feature-End: bdpt-mis-direct-sensor
Add flag indicating when direct sensor weights are used in PathVertex

Check this flag in validateConnectingSensorVertex().

Feature-Start: bdpt-mis-direct-both
Don't use direct sensor weights when direct lighting is used

Do this by implementing a PathVertex method to undo the
direct sampling weight correction.
Remove restriction on direct sensor sampling

Feature-End: bdpt-mis-direct-both