Make the Python finalization more deterministic:
* First, clear the __main__ module.
* Then, clear modules from the most recently imported to the least
recently imported: reversed(sys.modules).
* builtins and sys modumes are always cleared last.
* Module attributes are set to None from the most recently defined to the
least recently defined: reversed(module.__dict__).
Changes:
* finalize_modules() no longer uses a list of weak references to
modules while clearing sys.modules dict.
* When -vv command line option is used, the module name is now also
logged, not only the attribute name.
* test_module.test_module_finalization_at_shutdown(): final_a.x is
now None when final_a.c is cleared.
* test_sys.test_sys_ignores_cleaning_up_user_data(): the exception is
no longer silently ignored. Rename the test to
test_sys_cleaning_up_user_data().
* test_threading.test_main_thread_during_shutdown() keeps a reference
to threading functions since threading module variables are cleared
before RefCycle object is deleted by the garbage collector.