Work on data updating in adapters and ListView

The adapter and ListView system has several open issues about data
updating, and ListView's reaction for scrolling. From discussion with
tito and reference to SproutCore, more information needs to be added
about the nature of data change, which will be different for
ListProperty and DictProperty.

So far, for lists, a new cls parameter is added to ListProperty, so
that instead of using ObservableList always, it will check to see if
an ObservableList variant is provided. In this case cls will be set
to a new RangeObservingList for ListAdapter. Something similar will
be needed for DictAdapter.

As this branch has been open locally for a while, several discussions
with quanon about data updating resulted in a fix for how ListView
handles its adapter binding, to assure proper bindings to ListView
updating methods are reset when adapter changes.

Also, in the same area of ListView, the bind_triggers_to_view method
has been renamed to data_changed.
Name-spaced the individual ops

Added missing declaration of cls in DictProperty pxd entry

Added checks for recursion in set ops for the range observing observers.
Improved the delete op

Improved the delete op in callbacks to ListAdapter and in ListView.
Handled add ops, when adding first item

Fixed case where deletion takes data to 0 length, followed by add type
ops.

Made explicit op names for list.extend() and dict.update().
Introduced concept of general change info

Along with awareness for range changes, can report changes to sets,
ordering, as happens with sorting, drag and drop, etc.

Added a boolean for controlling the carrying of selection to list item
children.
Worked through data updating for list adapter.

Developed the same approach for dict adapter, both mainly working in
data_changed(). ListView has a data_changed callback also, which now
has code working in concert.

Added a small testing app, from which unit tests can be derived later.

Conflicts:
	kivy/uix/listview.py
Added range check for the setslice op

Also Commented change_info in ChangeRecordingObservableDict to be
consistent with the list equivalent.
Fixed bounds checking on slice op.
Fixed a recursion bug, and did some renaming

Fixed a bug in the setattr method of the ObservableDict subclass that
was causing recusion (was setting change_info with no guard).

Gave data change callbacks different names, to help decipher multiple
callbacks.

Started working on delitem for the data change ops for DictAdapter.

Conflicts:
	kivy/uix/listview.py
Fixed timing issues with running tests

Added schedule_once calls to help with timing issues related to
testing adapters.

Credit: quanon.
Added a ChangeMonitor; Worked on dict ops

Added ChangeMonitor  to work as a 3rd party to the change-recording
ObservableList/Dict, so that change_info can be stored without
triggering a data_changed callback.

Fixed order of change_info sets to come after call. Revamped list ops
accordingly.

Got setitem and delitem working for dict ops.
For list ops, added setitem_del; fixed setitem_set

setitem_del fires delitem (from ObservableDict). Thus, added conditional
to ignore setitem_del in setattr, and for setitem_set to be handled
correctly from setattr.
Implemented clear() in the dict ops.
Removed the remove op from ObservableDict

dict does not have a remove op, so removed it was from ObservableDict
and the subclasses and related recent work.
Implemented pop and popitem dict ops

With popitem, it became apparent that the change_monitor attr could be
deleted, so protections were added. Also, to keep the change_monitor
attr out of the dict and its methods, keys(), len and iterator methods
of dict were overridden.
Implemented setitem_add for dict ops

Also added a note about a method for DictAdapter that would do an insert
(at an index of sorted_keys).
Implemented setdefault for dict ops

Fixed lingering code, in light of newly overridden dict methods.
Implemented update for dict ops.
Implemented sort and reverse for list ops

Sort and reverse ops have a start call where pre-sort data-to-view
associations are made, so that in the finalization step cached views can
be rearranged and selection maintained.

Added buttons in the test app for changing data between strings and
objects.

Fixed a bug with the dict setitem_add op.
Added a start-stop system; worked on list/dict ops

Added a stop/start system for the change monitor.

Broke code that responds to data changes out of ListAdapter, and into a
new ListOpHandler. Also using this for sorted_keys in DictAdapter

The data DictProperty in DictAdapter is now observed for changes in the
same way the data list (ListProperty) is observed in ListAdapter.

Improved the way dict changes are handled in DictAdapter, either
dispatching for a dict specific change, or by changing sorted_keys.

Improved scrolling reaction to item adds.

Conflicts:
	kivy/uix/listview.py