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).
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
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
Merge branch 'master' into fp16-api
Convert half constants to float constants with an explicit typecast
Add missing type conversion in nan()