replace Iterator with GetEnumerator method to more closely conform with typical CRL collections
use = operator on boxed values rather than Object.ReferenceEquals
fix buglet where !thread was being compared to itself