[WIP] Add draft of int32 DeviceVector ext type

Add draft of `int32_t` `DeviceVector` Cython extension type.

TODO
====

 - Use `int32_t` `DeviceVector` as basis for `jinja2` code template for
   generating `DeviceVector` code for several types _(e.g., `float`,
   `uint32_t`, `uint64_t`, etc.)_.
 - Improve performance of `DeviceVector.as_array` by using
   `cythrust.thrust.copy.copy_n`.
Add paver task to generate `DeviceVector` types

 - Add `paver` task to generate a `DeviceVector` definition for each of
   the following types:
  - `int8_t`
  - `uint8_t`
  - `int16_t`
  - `uint16_t`
  - `int32_t`
  - `uint32_t`
  - `int64_t`
  - `uint64_t`
  - `float`
  - `double`
Add paver task to build device vector ext types

 - Add paver task to build Cython device vector extension types.
 - Generate `cythrust.device_vector.__init__` which imports each
   `DeviceVector` type as `DeviceVector<dtype>`.
  - For example, the `DeviceVector` for `np.uint32` is available as
    `DeviceVectorUint32`.
Add si_prefix
Generate Cython header for each device_vector type

 - Generate Cython header for each `device_vector` data type.
 - Add `DeviceVector<dtype>` to `cythrust.device_vector` namespace.
Add IPython notebook device vector demo
Simplify demo code.
Add notebook example showing Thrust speed-up...

 - Add notebook example showing Thrust speed-up using
   `thrust::transform` to add together two arrays.
 - Add `cythrust.utility` module with `plot_runtime_comparison`
   function.
 - Add `cythrust.si_prefix` module containing `si_format` function to
   format a floating point number using [SI engineering prefixes][1].

[1]: http://physics.nist.gov/cuu/Units/prefixes.html
Merge branch 'device_vector-template'