I have recently re-written my path-tracer from scratch, following the architecture laid out by pbrt much closer. This has allowed for some significant improvements including the majority of the program being built off of a handful of abstract base classes.
Acceleration structures are now a huge part of this re-design. Previously, render times would scale linearly to the amount of triangles in a scene. Now, each polygon-mesh is assigned an axis-aligned bounding box and evaluated through a KD-Tree acceleration structure. The image above previously would have taken many, many hours in the old renderer (Upwards of 20+ hours) and now only takes 8 minutes on an i7 CPU.