Updated header guards
Refactored Finish/Pigment -> Surface/Albedo
Improved Tracer intersection cache
Store ray in Intersection object
Clean up Ray class
Clean up camera code
Added forward declaration headers
Added .gitignore
Fixed const on Tracer
Add trace stack
Clean up naming in Albedo classes