fix(dccd): clean up ChangeRecord list while iterating

https://github.com/angular/angular.dart/commit/75fbded7ad2691eb4391c56a595ab488842a85ed fixes
this issue in Angular.dart, in which deleted change groups could be kept alive for long periods
of time due to a live group retaining a pointer to it.

This results in an API change, in which the ChangeRecord linked list returned by collectChanges()
becomes an instance of a special iterator class, which cleans up the list as it iterates.

This API is sort of a mess, and unfortunately won't make sense from a usability perspective until
ES6 is implemented natively. However, for the time being, it is not unreasonable.

Closes #1