refactoring: Using Contracts instead of ArgumentExceptions, Implemented Select and implemented other functions in terms of select. Removed iterator code in favor of yield.
Implemented Linq to Tuples, reimplemented a lot of code in terms of Linq. Added Contracts for argument checking. Used Yield for enumerators. Deleted a lot of code no longer required.