Cleaned up. Added semantic test.
Minor cleanups.
Removed .ToList() on some Intersect operations. Simply isn't needed. Enumerating the underlying collections will never be expensive. And if they are, that needs to be fixed. Safer than buffering what might be an unknown sized list.
Removed CountingEnumeratorExtension. Doesn't seem to be used.