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.
We're not supporting C++98, are we? In C++11 data() "Returns a pointer to an array that contains a null-terminated sequence of characters (i.e., a C-string) representing the current value of the string object" http://www.cplusplus.com/reference/string/string/data/