Beyond Boolean SAT: Satisfiability Modulo Theories