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

Closes #693
feat(blockhole): Change blockhole to have the insert / remove / move methods.

Closes #689