Feature/opencl optimizations

This is a minor set of optimisations to the OpenCL applications and backend. It removes unwanted clEnqueueWriteBuffer() calls, particularly for copying constants to device memory, which has now been modified to be passed by value to the kernel.