A branch-and-cut algorithm for partition coloring