Abstract away device functions and data structures

Rendering will now be done in the RenderSession class, which uses
the device data structures and functions

NOTE: this will **NOT** compile
Load the kernels, use operator() to retrieve wrapped value of OpenCL C++ API
Instantiate a rendersession, and use it in the main loop
Make the code compilable (the program fails)
Remove operator overload for device_mem

Program fails at setKernelArg call: Error -51 (CL_INVALID_ARG_SIZE)
Remove unneeded include
Kernels were pushed in the kernel vector in the wrong order (or rather, the enums were defined in the wrong order)
Correct the global work size of produce ray kernel (was height*width, should be height)
It works: migrated to the normal API (no C++ API)

Apparently the C++ Wrapper API automatically releases your OpenCL context upon destruction, probably according to RAII idiom.
Add frame duration output again
RenderSession: Malloc buffers and write shapes only once in the constructor
Fix build for OpenCL on CUDA devices
OCLDevice: Remove the old code which was commented
Remove debug output of cam size
Copied macro to device_rewrite branch
Merge branch 'device_rewrite' of https://github.com/gfokkema/RT-Raytracing into device_rewrite
Merge branch 'master' into device_rewrite

Conflicts:
	src/devices/opencl.cpp
	src/devices/opencl.h
	src/kernel/kernel.cl
	src/scene.cpp
load_kernels with multiple file paths (not working on my machine)
Fix loading kernels
Use vector instead of array for program sources