Fixed Widget lifetime issues caused by CompoundEditor.editors().

I don't understand all the details, but the fact that the __recurse() function was referring to a variable in an outer scope caused python to hold on to a reference to that variable after editors() returned. Rewriting to avoid referring to the outer scope fixes the problem.

This problem first showed itself in the new shutdown checks, after using the Filter tab on the ShaderAssignment UI to create a new filter.