The first few patches will introduce temporary leaks or cyclic refs, but that's because we'll handle them properly with the dispex CC, and the last patch should fix this. Other objects' traversal will follow in another MR.
EDIT: This now does more prep work and converts nodes to use the dispex CC, using temporary helpers, without any other object or temporary leaks yet.
-- v4: mshtml: Release the event target during node unlink. mshtml: Implement node cycle collection using the dispex. mshtml: Move ccref from the node to the dispex. mshtml: Rename EventTarget_QI to EventTarget_QI_no_cc. mshtml: Rename dispex_query_interface to dispex_query_interface_no_cc. mshtml: Use designated initializers in node vtables. mshtml: Use designated initializers in dispex and event target vtables. mshtml: Make all event target vtbls const. mshtml: Split IUnknown methods for outer windows into separate vtable. mshtml: Move console to the inner window. mshtml: Use ASCII strings for dispex object names.