huge commit:
 * now that most basic pipeline code is working: put the code of each pipeline stage into a separate class and split the draw function code
 * added start/stop functions to pipeline -> this allows for easy rendering of multiple models now (multiple draw calls)
 * added an actual context/draw_state object (all data that needs to be accessed across pipeline stages should be stored/referenced in there; still completely wip)
 * implemented/fixed triangle binning ("soft-clipping" inside the binning kernel), actual triangle culling is still wip
 * added depth buffer support (note: when using a cpu device, a shared opengl float buffer does not seem to possible right now)
 * added (wip) shader program support (to be used for user specified vertex/fragment/... shader), syntax+specifiers are/will be similar to GLSL (right now it is possible to specify input/output buffers and uniform structs -> these will be parsed in oclraster_program (with some limitations) and an opencl program will be generated from these to gather device specific information about all user specified structs (struct size + size and offset of each member variable))
 * added/integrated camera class into oclraster lib + slightly modified camera handling in oclraster (also: camera is run every frame now, instead of on every user input -> much smoother movement)
 * added/fixed screen resizing and upsacling support (added upscaling config option)
 * opencl class object is now a global variable (ocl) -> no need to always get the pointer from the oclraster class any more
 * removed old kernel local range computation function and added a new and better one (this regards the device specific max work-group sizes now and sets the global range to a multiple of the max local work group size for better device utilization -> needs to be checked in every kernel)
 * fixed kernel functor handling (kernel functor is now stored inside the kernel object to avoid invalid pointers when leaving the run_kernel scope when the kernel has not been run yet)
 * fixed set_active_device when trying to use a device that doesn't exist (default to the first valid/working one)
 * added delete_kernel function to the opencl class (now that there are user specified programs/kernels, there is a need to selectively delete kernels)
 * added barrier function to the opencl class (enqueues a barrier in the current command queue)
 * fixed a2m opencl buffer handling (buffers should be aligned properly and be block-on-write)
 * cleaned up oclraster simple sample code
 * added/use template transform/rasterize kernels for now (these already contain user code markers that will be used later on -> user code will be inserted in these locations)
 * added simple transform user vs/fs (unused for now, but the same code is used inside the template kernels)
 * extended clear_framebuffer kernel (+depth buffer support; added framebuffer size parameter since the global range might be larger than the actual framebuffer size now)
 * added oclraster_* struct definitions to oclr_global.h (to be used by the user), note: struct data should always be packed and (16-byte) aligned, otherwise kernels might silently fail (i.e. read and use false data)
 * ignore "-Wmissing-prototypes" warning when using clang for compiling opencl kernels (this is completely unnecessary for opencl)
 * added interpolate macro and reflect function to oclr_math.h
 * added additional models (utah teapot + blender monkey)
 * implemented/fixed some TODOs, added lots of new TODOs ...
 * lots of cleanup and minor fixes (and things i probably forgot)