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.