KVO now honor options when creating change dictionary

Currently Key Value Observing will always generate new and old values in the change dictionary regardless of the options provided when adding the observer. This pull request fixes this problem.

This problem made KVO and bindings slower then it needs to be. The speed improvement is 10% to more then 200%. It also prevented things like lazy loading as all key paths was accessed when building the change dictionary.

I have also added test cases that covers all possible scenarios. I have fixed many faulty test cases that was using the wrong options as KVO always included old and new values in the change dictionary.