Introduce a WindowProxy for accessing a subset of functionality

from other threads. This currently provides a way for other threads
to wakeup a blocked event loop on X11. Other platforms have stub
functions that need to be implemented. This is similar to
the functionality of glfwPostEmptyEvent.
Shouldn't take be named `Awakened`?
`Refresh` makes the assumption that we're going to wake up the window to draw it.