Minimum version macros

This PR adds minimum version macros as discussed in #42, #49 and #40 based on a runtime check and caching of the result in a global dictionary.

They take the form of a ternary operator:

````julia
# E can be a variable of type Context, CmdQueue, Platform or Device
@min_v12 E begin 
    ....
end : error("Only supported since OpenCL 1.2")
````

to see how this might be used take a look at the branch https://github.com/JuliaGPU/OpenCL.jl/tree/vc/refactor_version_dependent_code