Split Cornell box example into a bright version and a dark version (default)
Allow for different primitives to have the same sensor
Separate out shared state of GeometricPrimitive into its own struct
Rename Diffuse to DiffuseMaterial
Pull light-related functionality out of Material into its own interface