Moved all structs to their own header

Also made OpenCL capable of loading multiple sources files
This way OpenCL and CUDA can use the structs globally defined in gpu_types.h