Prevent circular refs using idle and timeout manager when running

If an IdleManager or TimeoutManager had been scheduled, it would not get
destroyed until it was executed by the main loop, causing criticals
if the objects enclosed by its callback had been destroyed.

This adds a weak reference to the manager object itself when scheduling
on the main loop, so it can get safely dropped.
8 jobs for wip/weak-refs-for-callback-managers in 14 minutes and 8 seconds (queued for 1 second)