Overhaul to Opencl to support multiple devices and no singleton