the missing Window.pm

allows to construct Window objects from arbitrary XId
without doing "unofficial" bless
a different way to break a windowid
tool to dump info about windows

hopefully enough to reconstruct what happened to something,
 when it became the BadWindow
prepare to get XGetWindowProperty calls logged
switch to logging version of XGetWindowProperty

 find * -type f -print0 | grep -zE '\.(c|xs)$' | xargs -r0 -n1 perl -i~~ -pe 's{\bXGetWindowProperty\(}{XGetWindowProperty_LOGGED(__FILE__,__LINE__,  }g'

applied in bulk and eyeballed before commit,
one hit rejected in win/stubs.c
exercising script for debug logging
make XGetWindowProperty_LOGGED generate VirtualEvent

get a Perl stacktrace from near each XGetWindowProperty
catch it with Tk::WindowTrace

borrowing from
  pTk/mTk/generic/tkBind.c:HandleEventGenerate
  pTk/mTk/win/tkWinMenu.c:MenuSelectEvent
to get the virtual event
Tk::WindowTrace improvements

hexdump the raw event property
tell when widget !Exists
hexdump of selected raw XEvents
Tk::WindowTrace - gzipping to file
tkUtil.c - bugfix the ATOM dumper

it only showed the first