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.
You mentioned that separately you would look at implementing IStrongEnumerable on other collections.  Obviously you won't be able to for collections not in this library, e.g. List(T), T[], etc.  When you do that work, you might look at whether special casing a few of those here is worthwhile.  It would all depend on what we expect usage patterns to be like, e.g. is it common or not to union an ImmutableHashSet(T) with a List(T).