Return early from pushuserdata if object exists

Easier to read this way
Insert obj reference into metatable.userdata instead of the metatable directly and properly delete it in gc_T

This prevents some kind of memleak that caused all objects to be kept in memory until lua_close