Add support for window change notifications.

This patch introduces WindowChangeObserver, an interface which
can be used by clients to observe for Window state changes.
This is extremely useful in case client is interested to track
when a particular window receives focus or when an input device
enters a window.