Update knockout.dirtiable.js

This is actually a mixed-up version of Ryan's and your work. From Ryan's implementation I took the dirty-able functionality from you I took the interface, the extender and the initiative. One of the problems I found with your implementation was that once an object was made dirty there was no turning back, it stayed dirty even when changing all properties to their initial values, for example if you track an Array and add an item, it is marked was dirty but if you removed that same item, it wont go back to non-dirty state. Ryan's work supports that.