Use glGetHandleARB to get program object

Some systems don't define the GLHandleARB as unsigned integer and thus want to
get a complete pointer when calling glUseProgramObjectARB. This makes it
necessary to change the program variable to GLHandleARB and replace the
glGetIntegerv call to the old ARB glGetHandleARB to make sure that the returned
data can be of any type and not only integer.