gi: accept not GType struct as an input argument
gi: accept getting a field value from not GType but GType descendant struct

e.g.: GdkEventXXX structs. They are not GType structs but their parnet
is GdkEvent. GdkEvent is GType union.
gdk3 test: check not only reader but also writer
gtk3: remove needless code
gdk3 test: add a test for key value