feature(change detection): implement barebone ChangeDetector

fixes #39