LV2: less heavy-handed approach to lifecycle issues
The crash on exit was caused by the custom widgets persisting after the .so
file has been unloaded. This is problematic if those widgets implement a
custom finalize method, because that method will be inaccessible after .so
gets unloaded.
This traces back to a hasty and incorrect 30c3 fix for other lifecycle issues,
which was motivated by the fact that notebook containers were destroyed
before the contained widgets. In this version I hope both situations
are handled correctly - the notebooks are deleted after the child
widgets, but both them and all the other widgets (including custom ones)
get destroyed before the end of the gui_cleanup function, when the finalize
method is still accessible.