fix enumerate to correctly iterate more than once

The Iterable was closing over the index incorrectly.

Fun fact, if we had generators in Dart, we could do it like:

```dart
Iterable<IndexedValue> enumerate(Iterable iterable) {
  int i = 0;
  for (var value in iterable) {
    yield new IndexedValue(i++, e));
  }
}
```