Backend improvements

Most of the changes are improvements and fixes to the CUDA backend.

Changes to https://github.com/numba/numba/blob/ad7a67bd798d23d7c6859595a23e4c46b58743eb/numba/npyufunc/wrappers.py is to make the ufunc CPU backend generates SIMD code.  It now generates a fast loop and a slow loop.  The fast loop is used if the array is unit-strided (dtype.itemsize == stride).  This allows LLVM to use loop-vectorization.