Add ARB_program_interface_query function calls and convenience methods

Fixes #267

I've done some rough testing, so it (and especially the convenience methods) should be working fine.
This should be the correct solution, since each of the alternatives using ```std::string``` (```&result[0]```, ```result.c_str()```, and ```result.data()```) have the assertion, that the content behind the string will not be modified (copy-on-write-behavior of the STL).