Use set_scalar_arg_dtypes on python kernels

This involves pulling out the kernel from the program object, and
running this method, specifying the scalar types (memory types are
listed None).
This means that clCreateKernel is only called once, when we pull
out the kernel. It is called once for everytime program.kernel()
was called before.