Single-dimensional CudaTensor reduction handles large tensors

Previously most dimensions were limited to 64k. Now there is no limit.
Improved performance of single-dimensional CudaTensor reduction

This uses a parallel reduction to speed up the case where the reduction
is over the innermost dimension. For a 2k x 2k matrix the speedup is
around 3x.

This approach means that the reduction is done using single-precision
rather than double-precision, as before.