util/set: add destructive iteration macros
Zink uses sets almost exclusively for tracking unique members without incrementally removing them. These changes provide a small amount of optimization for that case, allowing sets to be cleared while iterating.