Finally some cleanup, material classes allow you to assign different materials, recursively traces for arbitrary number of ray bounces, scene objects store traceables (no more messy trace function)