Constraint and Satisfiability Reasoning for Graph Coloring