Branch-and-bound for D-Optimality with fast local search and variable-bound tightening