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