Preliminary support for raising user exceptions in CUDA kernels

This adds the ability to raise an exception class in a CUDA kernel when it is compiled in debug mode.  Exception is ignored if debug mode is off.  This is because checking the exception state is expensive and would break asynchronous execution.