These results look good, but I don't think it is actually balancing correctly still.
The integrity test is wrong -  it needs to check the longest path against the shortest path.
The double red check sometimes still fails.
Next, I'll incorporate the integrity check into the tester.cpp, outside of the timing benchmarks, and
generate reports based on violations.  The depth checks will be enhanced to compare the longest
and shortest black node paths.