GNOME 40 objects handling cherry-picks
Various cherry-picks from upstream commits to target gnome-40.
I've took most of relevant commits from !593 (merged) and !613 (merged) (plus few from !604 (merged) and !602 (merged)), excluding few tests and cleanups.