Added struct af_features to store image features (aka keypoints).
Added features class to manage af_features structs.
Added FAST feature detector frontend.
Added FAST feature detector CPU backend.
Added FAST feature detector CUDA backend.
Added FAST feature detector OpenCL backend.
Bugfix for opencl resource cleanup on windows

OpenCL resources on windows platforms seem to be
doing something wrong in reference counting due to
which the at program exit, applications throw runtime
error on clRelease* calls. Avoiding clRelease* calls
for windows platform for now.

Also, changed DeviceManager class memeber variables
naming convention.
Removed device selection from transpose test

* Increased abs diff for rotate_linear test because of windows
PERF: improvements to random number genration in CPU backend
Wrapping af_get functions in AF_CHECK macro
Changed setContext function scope

setContext is not being used anywhere else other than inside member
functions of DeviceManager. Therefore, moved setContext function
from global scope to protected scope of DeviceManager.

A similarly named function shall be added soon but with different
input parameters as part of graphics interop.
added isDoubleSupported func for opencl backend

This function shall be used to avoid creation of double
precision 'af::array'/'af_array' on an OpenCL device that doesn't
have corresponding hardware support.

Also modified af_info/af::info to print double precision capability
for each device listed.
Added double precision checks in opencl

Added sanity checks for all create*Array functions in opencl backend
to report an error to the user if they try to create double precision
arrays on devices which doesn't have that capability.
PERF: improvements to random number generation in CUDA backend
function to check double precision availability

* c api exposes af_get_dbl_support function
* cpp api exposes af::isDoubleAvailable function
handle double precision in opencl tranpose

* modified tranpose opencl kernel to handle double precision
  extensions appropriately
* added double precision sanity in tranpose opencl backend wrapper
* replaced std::vector container in transpose function with std::map
  to store cl::Program and cl::Kernel objects.
* added new helper function in testing framework `noDoubleTests` to
  check for double precision availability before proceeding to double
  precision data tests.
* modified tranpose tests to appropriately check for double precision
  availability
adding missing header in testHelper hpp
Added handlers for array type in features class.
Fixed failing abs() call for int/unsigned types on CUDA backend of FAST.
Added test reader for image input with array output.