Here is a cut at a BVH build that cuts along the longest axis using the surface-area-heuristic (SAH). The SAH minimizes:
This has been shown by many people to work shockingly well.
Here's my build code and it works ok. I still have to sort because I need to sweep along an axis. Is it worth it to tree each of three axes instead of longest? Maybe.... bundles of long objects would be the adversarial case for the code below.