Implement array change tracking as an extender that can be used with any observable.
Clarify that ordering of array changes is only undefined for replaced items (the added and deleted entries for that item can be in either order); the changes are always ordered by index.
Optimize cacheDiffForKnownOperation for similar operations.
Allow extender to not return a value if the target observable isn't replaced.