New ClassAds provide an iterator via the begin() and end() methods to traverse all of the attributes in the ad. The iterator doesn't handle any chained ad.

One callsite is in Quill's jobqueuecollection.cpp. This site may require handling of chained ads.

One difference between old ClassAds' NextExpr() and new ClassAds' iterator is that the former returns an ExprTree of the assignment operator (including attribute name and value) while the latter returns an ExprTree of just the attribute value. This shouldn't be a problem, as all of the callsites immediately use the ExprTree to either copy into a new ad or unparse into a string.

Developer time: half day to examine jobqueuecollection.cpp, plus 1-2 weeks student time to update callsites