Improve C# IEnumerable implementation

This pulls the C# related commits from #53 so that I can move forward with some work with the alpha while we figure out how we want to handle the other language implementations before merging #53. 

I contemplated removing these commits from the arrays branch of #53 completely, but opted to leave them. If we want to go the other way, just let me know.