Experimental OpenCL backend

This is a big PR containing all the experimental OpenCL work.