track changes in sources array

when moving the changes over from plunkr I realized that id store and array change tracking are both generic, so I extracted them as services. I am not sure what the naming convention is for this stuff. maybe we should have ui.util package. Anyway, we can iterate over this PR.