Implement Enumerable.Range
Remove use of temporary array in LINQ ElementAt and ElementAtOrDefault, and throw ArgumentOutOfRangeException when appropriate