A branch-and-cut decomposition algorithm for solving chance-constrained mathematical programs with finite support