Clustering with Fairness Constraints: A Flexible and Scalable Approach