Limit foreign struct checks to GI_INFO_TYPE_STRUCT

Add struct type check before calling g_struct_info_is_foreign().

https://bugzilla.gnome.org/show_bug.cgi?id=736175
Fix memory management problems with struct arguments to signals

Replicate struct marshaling logic for determining if struct arguments
to signals should be passed by reference to callbacks.
Maintain a list of these structs and apply an in-place copy of the struct
pointer if the struct wrapper is held longer than the duration of the
Python callback. This allows for both mutation of struct arguments from
callbacks as well as memory safety incase a callbacks holds onto the struct.

https://bugzilla.gnome.org/show_bug.cgi?id=736175