Improve reduce_on_gpu kernel if device.vendor() == NVIDIA

An internal template functor is used in order to get a clear code
when the device is from nvidia we can do:

  - loop unrolling
  - warp reduction using volatile local memory
Add device vendor predicate functions

This adds a couple new functions for checking the vendor of a
compute device. This is useful for algorithms which specialize
based on the type of the underlying hardware.