perf(change-detection): optimize DirtyCheckingChangeDetector.collectChanges()

Closes #693