objectNameUtils: Use a consistent strategy for finding 'top-level' widgets:
- Never include QMenus, which aren't really top-level for our purposes (and expose a bug in qt or pyqt)
- Don't include anything that has already been deleted on the C++ side.
EventRecordingApp: Delete the unique_child_index attribute immediately when a widget is removed from its parent.
recording/playback: call gc.collect() before every event is recorded/played back.
readme: Added doc todos
When locating objects, exclude widgets that aren't visible. When deciding if an NamedObjectNotFoundError is legitimate, exclude KeyRelease and WheelEvents.
gui: Added author name (required), removed start button, added icons.