Reworked the selection mechanics; Added controllers

This work paves the way for additional improvements and simplification
of the ListView API, and for its use in kv, and for similar future
treatments for other collection-style widgets.

Previously, a very generic approach was taken to implementing selection
for data items and view instances, by means of an is_selected boolean.
This flexibility required considerable complexity in the attempt to
detect the property in different data types. The boolean property was
replaced with a SelectionTool object, called ksel for "Kivy selection,"
that is added to items. The convenience classes SelectableDataItem
and SelectableView were modified for this, so identification of
selection-enabled item subclass instances is easier.

The ksel attributes on data have an additional role in providing an
interface for item selection operations, with select() and deselect()
methods, and convenience functions for creating bindings to the boolean:
bind_to(), bind_to_ksel(), and bind_from_ksel().

The adapter create_view() and the selection handle_selection(),
select_item(), and deselect_item() methods were improved by the use of
ksel, and other changes.

A new set of enums for selection schemes was created for variations on
the arrangement of a data list and/or a view list constructed from data.
The default VIEW_ON_DATA scheme works as selection has previously
worked. Other choices for scheme include those wherein selection on data
drives the show, or selection on views, or both, and one scheme for
selection on a single list of objects.

An additional enum controls how the selection updating between bound
data and views happens via direct call to set selection or via bindings.

A controller system, closely following the design of the adapter system,
but simpler, was added. There is an object controller and a list
controller. These can be used in combination for coding the relationship
between data and selections in traditional MVC approaches. A new list
cascade example was added, list_cascade_controllers.py.

ListAdapter and DictAdapter were modified to optionally take controllers
as input parameters for data. This involves automatically setting
bindings, a technique that should prove useful for taking a similar
approach in simplifying the ListView API.

Tests, examples, and sample data were updated for ksel and other
changes. Tests were added for controllers.