* extended image support:
   * user programs can now handle any image data+channel type combination (2D, reading with nearest or linear filtering, normalized coordinates only)
   * programs can now be specifically compiled at runtime for a certain kernel image specification (currently bound image types; note that this will happen automatically)
   * added image_read, image_read_uint and image_read_int functions for all types of (2D) images -> oclr_image_support.h (NOTE: after much consideration and testing different approaches, I decided to go with a bash script and a "template" file to generate all image functions for all types of images beforehand; trying to do this completely in OpenCL C at compile time turned out to be too messy, too inflexible and would have resulted in an even longer compilation time; trying to do this with C++ at compile time with variadic templates, constexpr and compile time string processing and then injecting the generated code into user programs seemed like a nice, flexible solution at first, but as it turns out, using variadic templates with 20000+ arguments requires a few GBs of RAM and a lot of time - the generated header file is on the scale of 131k+ characters/arguments right now, and will become even larger once I add image write functions -> not an option)
     -> etc/image_support/image_support.sh and etc/image_support/image_support_template.h are used to generate oclr_image_support.h
   * image_read, image_read_uint and image_read_int usage and behavior is very similar to the read_image{f,ui,i} OpenCL functions (which is fully intended)
   * modified oclraster_program according to the changes above (NOTE: image struct syntax: "images { [[,read_only,write_only,read_write] [image1d,image2d,image3d,framebuffer]<DATA_TYPE_HINT, CHANNEL_HINT> [name];]* };" - hint is optional and will default to UINT_8+RGBA, access qualifier is optional and will default to read_write)
   * multiple image structs are now combined into a single one (or treated as a single one, since there is no need in handling them separately)
   * compressed image header to 8 bytes (from 16)
   * moved image type enums to a separate file (image_types.h)
   * added combined image type (data type + channel type) for easier usage/identification
 * due to the necessity to overload C functions, this project now requires an OpenCL platform with a clang compiler (Apple, Intel, Nvidia) or one with "C++" support (AMD), i.e. all that have been supported before
 * enabled cl_khr_fp16 and cl_khr_fp64 extensions in the global OpenCL header file + added half vector support for platforms without direct cl_khr_fp16 support (OS X)
 * added use_kernel function to the opencl class to directly specify the used/active kernel (no need to mess around with identifiers)
 * moved some common transform_program and rasterization_program code to oclraster_program
 * moved common transform_stage and rasterization_stage code to stage_base
 * cleaned up (removed) transform_stage vertex/index/constant buffer structs (-> directly uses opencl buffers now; layout is defined by the user)
 * added const_string header (compile time string processing; not used any more, but might be of use later on)
 * added iOS helper files (forgot to commit these last time)
 * extended oclr_simple sample with a simple float32 noise texture (creation on the host side + read in the rasterization program)
 * fixed typo in config.xml
 * bumped version