Move dataChange to Batman.DOM.AbstractCollectionBinding, since it is very generic

The ```dataChange``` event that was in ```IteratorBinding``` is pretty generic and could be usable for other objects (I have a private object using it.

@nickjs this was my final solution to my iterator binding. So instead of doing this:

```
    @controller.observe 'event_period.event_times', (newSet) =>
      @lastSet.off 'itemsWereAdded', @refreshTimes if @lastSet
      newSet.on 'itemsWereAdded', @refreshTimes
      @lastSet = newSet
```
Now I can do:

```
    @binding ||= new App.EventsShowTimeChartView.Binding(keyPath: "event_period.event_times", view: @, node: @node, attr: 'time')
```
with this binding Binding:
```
class App.EventsShowTimeChartView.Binding extends Batman.DOM.AbstractCollectionBinding
  handleArrayChanged: (newItems) ->
    @view.refreshTimes()
```
Thoughts?