Generalize handling of extra window data

Extra window data will be associated with a window via the "user
pointer" feature of the library. To prevent data objects from
being prematurely garbage collected, they will also be referenced
in a global collection for the duration of the window's life.

Only the window title stored for now, but this mechanism can be
expanded in the future to support things like anonymous per-window
callback functions.