Implement initial version of MicrofacetMaterial

Have it handle reflection only for now.

Have it do uniform sphere sampling of the half-angle vector for now.

Also add some needed vector and float32 utility functions.

Make sphere in Cornell box scene use MicrofacetMaterial.
Implement cosine sampling for MicrofacetMaterial

Make Cornell box scene use cosine sampling.
Implement distribution sampling for MicrofacetMaterial

Make Cornell box scene use distribution sampling.
Implement distribution cosine sampling for MicrofacetMaterial.

Make Cornell box use distribution cosine sampling.

Feature-End: microfacet-reflection
Add test scene for multiple importance sampling

Feature-Start: combined-paths
Allow for combination of path types in PathTracer

Make most test scenes use both emitted light paths and direct lighting
paths.
Emit more debug info in PathTracer

Move existing debug info up one level, and add a few new pieces of
debug info for levels 1 and 2.
Add configuration option for weighing method in PathTracer

Name the current one "uniform".

Feature-End: combined-paths
Add corresponding pdf functions for sampling functions

Feature-Start: mis-basic
Add ComputePdfFromPoint() function to Shape
Implement ComputePdfFromPoint() for shapeSet
Add ComputeLePdfFromPoint() to Light
Expose material and light members of Intersection
Add ComputePdf() function to Material
Add pdf return value to SampleWi() method of Material
Add Scene.SampleLight() helper method
Implement Distribution1D.ComputeDiscretePdf()
Implement Scene.ComputeLightPdf()
Add pdf return value to SampleLeFromPoint() method of Light
Implement weighing method that uses the balance heuristic

Use that weighing method for most test scenes.

Also add check for invalid weights.

Feature-End: mis-basic