Revert "Revert "Add/remove kernel functions using "half" types""

This reverts commit 5599c3bb134db9c9b383a88b0134e3d261d5d757.
Correct shuffle test case
Introduce FP16_API, indicating that kernel functions can be called with fp16 arguments

Use __IF_FP16_API to check whether this is supported. __IF_FP16_API implies __IF_FP16.

Currently, __IF_FP16_API is always enabled when __IF_FP16 is enabled. This may change in the future.
Support cl_khr_fp16 correctly

Properly provide the cl_khr_fp16 OpenCL extension for kernel library functions.

Disable cl_khr_fp16 on platforms where it is not supported.
Correct definition of NAN
Provide geometric kernel functions for fp16
Merge branch 'master' into fp16-api

Conflicts:
	lib/kernel/vecmathlib-pocl/acospi.cl
	lib/kernel/vecmathlib-pocl/asinpi.cl
	lib/kernel/vecmathlib-pocl/atan2pi.cl
	lib/kernel/vecmathlib-pocl/atanpi.cl
	lib/kernel/vecmathlib-pocl/cospi.cl
	lib/kernel/vecmathlib-pocl/degrees.cl
	lib/kernel/vecmathlib-pocl/generate-files.py
	lib/kernel/vecmathlib-pocl/ilogb.cl
	lib/kernel/vecmathlib-pocl/kernel-vecmathlib.h
	lib/kernel/vecmathlib-pocl/radians.cl
	lib/kernel/vecmathlib-pocl/sinpi.cl
	lib/kernel/vecmathlib-pocl/tanpi.cl
Resolve merge conflicts
Correct return types of isequal() and friends
Adjust numerical constants in kernel function implementations to their argument types

Introduce macro TYPED_CONST(TYPE, HALF_VAL, SINGLE_VAL, DOUBLE_VAL) that chooses the right constant depending on the type required. Use e.g. as acos(a)/TYPED_CONST(stype, M_PI_H, M_PI_F, M_PI).
Fix clGetDeviceInfo's CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE case

device->max_constant_buffer_size is cl_ulong not cl_uint
Remove some stale references to USE_LLVM_API
Remove unused #define
Re-map uint and ulong to cl_uint and cl_ulong in C++ code

ARM headers seems to define ulong to something else, and we want to avoid this conflict. 
Only enable 64-bit atomics if cl_khr_int64 is set
Merge pull request #88 from franz/minor_bugfixes

Fix CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE
Correct kernel routines maxmag, minmag, nan, and rootn
Correct argument types in kernel template for pown and rootn
Use float builtins (instead of double builtins) for half kernel functions

Clang does not support half builtins yet.
Define half constants more elegantly