Implemented bonus for multiple players repairing #3748

This works by finding the square root of the amount of players repairing, and multiplying the base HP restored by that. The square roots are cached to prevent extraneous calculations. I also changed a  `for(;;)` to `while(true)` to aid code quality. It's all compiled into `GOTO`s anyways
I realize this code already existed but now is better than ever to remove it.
We're already inside the RepairableBuilding trait
so there is no reason to check `self.HasTrait<RepairableBuilding>()`.