changes by geogeff that needs a real commit message

recovered from mixing with other changes (bad merge)
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.
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.
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
Removed selection and view code from ListAdapter

Moved selection code into a mixin used in Adapter, and thus in both
ListAdapter and DictAdapter (removing subclassing of
DictAdapter(ListAdapter), which caused problems).

Moved cached_views and view creation/handling code from ListAdapter to
Adapter.

Made SimpleListAdapter a separate class.

Made a simple change monitor for dict changes.

Added a differentiation between data and sorted_keys in the change_info
reset in ListView.
Added a sort button for the dict adapter tests

This was needed for fixes in the list op handler.