Add Thrust partition support,...

 - Add Thrust [`partition` function][1] support.
 - Add support for getting/setting slices to `DeviceVectorView` classes.
 - Add IPython notebook with demo implementation of `DeviceDataFrame`,
   which provides a wrapper around several device vector views.  Data
   can be get/set in `pandas.DataFrame` format.

[1]: http://thrust.github.io/doc/group__partitioning.html
Add DeviceDataFrame to cythrust module.
Fix __setitem__ on DeviceVector classes
Add counted versions of Thrust partition functions

Add counted version of each Thrust partition function.  These new
functions return the number of items in the first section of the
partition, rather than an input iterator.

This functionality can be convenient in general, but it was actually
necessary to work around a Cython compilation issue, where a subtraction
between two zip iterators could not be compiled.  This meant that it was
not possible to determine the split point after partitioning.
Add tuple6, tuple7
Fix DeviceDataFrame.view method...

Fix `DeviceDataFrame.view` method.

Prior to this commit, the requested index boundaries for the new view
were being resolved against the start and end of the base vector
boundaries, and _not_ against the boundaries set for the current view.
As of this commit, this has been corrected.
Add add and drop column methods to DeviceDataFrame
Add DeviceVectorCollection...

Add `DeviceVectorCollection` to store collections of `DeviceVector`
instances, where a `DeviceVectorView` is also created for each
`DeviceVector`, enabling easy slicing of vectors for Thrust functions.

When possible, it is preferable to use the `DeviceDataFrame`, but the
`DeviceDataFrame` requires that all input arrays are of the same length.
The `DeviceVectorCollection` may contain arrays of varying length.