Teaching the Old Dog New Tricks: Supervised Learning with Constraints