Optimization with Non-Differentiable Constraints with Applications to Fairness, Recall, Churn, and Other Goals