A General Framework for Auditing Differentially Private Machine Learning