Avoid boxing ImmutableHashSet<T>.Enumerator

This introduces a pattern that can be applied anywhere to conveniently avoid boxing one's own Enumerator struct without duplicating the body of foreach loops everywhere.

Fixes #211 

If folks like this, I can add a commit that applies the pattern to all the other immutable collection types.
Yes, good point. I'll at least add a comment for now, and try out a sample like List<T> to make sure it works.
I don't think `T[]` has a struct enumerator, does it? Special casing that one might require special handling (and a more complicated `if` statement) inside my `EnumeratorAdaptor` struct. It may not be worth that one.