Conform to dart:core Iterator spec

- return null if the iterator has not yet been moved
- return null if the iterator has been moved after the last element
- repeat moveNext() invocations should be safe

via: https://api.dartlang.org/apidocs/channels/dev/#dart-core.Iterator
Release 2.0.0