A flexible, polynomial-time, construction and improvement heuristic for the quadratic assignment problem