In particular, merge the `next` and `done` method to reduce call overhead. See [Joe Duffy on enumerating in .Net](http://joeduffyblog.com/2008/09/21/the-cost-of-enumerating-in-net/).