This example shows one possible way of implementing Drag and Drop for
tableviews using bindings and core data. Our purpose is to provide a simple UI
for adding members from a pool of all people into a club. The focus of this
example is the ``NSObject`` subclass named ``DragSupportDataSource``. All of
the table views in the application UI are bound to an array controller but
have their data source set to a single ``DragSupportDataSource``.

``NSTableView`` drag and drop methods are called on the table view's datasource.
Using infoForBinding API, the ``DragSupportDataSource`` can find out which
arraycontroller the table view in the drag operation is bound to. Once the
destination array controller is found, it's simple to perform the correct
operations.

The data source methods implemented by the ``DragSupportDataSource`` return
``None``/``0`` so that the normal bindings machinery will populate the table
view with data. This may seem like a waste, but is a simple way of letting the
``DragSupportDataSource`` do the work of registering the table views for
dragging. See ``DragSupportDataSource.py`` for more information.

Things to keep in mind:

* The drag and drop implementation assumes all controllers are working with
  the same ``NSManagedObjectContext``

* Most of the code in the ``DragSupportDataSource`` is for error checking and
  un/packing objects
