fire change events when array mutator methods are used
refactor smart updates a bit