Opencl types

Hello,

I noticed that several types were missing from the OpenCL support. I've added lots of them in but not all of them. In particular, I'm not sure what is the correct way to add support for types of the form `complex float` and `imaginary int`, so I've left them out for now. As it is, those are not real OpenCL types at the moment, they are reserved types.

Thanks!