Application.Idle is invoked on the same thread used to add the event

our hacky double buffering only works on the client area, not the nc
area.  need to move to a more XplatUI solution involving server-side
drawing surfaces (pixmaps in the X case).

right now the expose/configure event aggregating is done in the
XEventThread (in the hwnd code, but in the thread running the x event
loop).  There is probably a way to get it to run in the thread doing
GetMessage, probably by making GetMessage know about both the xevent
and paint queue's, and having it consume the x queue until there's
nothing left, doing the AddExpose stuff there.  then, once the xqueue
is empty, consume the paint queue.  This has the added benefit of
making the paint queue a ThreadQueue local thing - no locking will be
needed on it, since the only thing touching it will be the thread
running the message pump.

why do we /nowarn:108?  we lose tons of possibly important warnings due to that...

more event work:

CheckedListBox:  nothing done.
DataGridView*: nothing done.
GridColumnStylesCollection: nothing done, no Component inheritance
GridTableStylesCollection: nothing done, no Component inheritance
MenuItem: what do we do about CloneMenu?  we can't have assignment of events like that (look for the #if notyet)
MonthCalendar: nothing done.
Panel: nothing done.  see whether the events should be "new" or now..
