always use QueuedConnections in events

Everything is guaranteed to run asynchronously. Before, if you were
already on the UI thread, everything was synchronous for you.
move, resize, and close events in the browser
connection changed event

TODO: We really need to write our own mqtt loop. The default one doesn't
notice network changes for a good while, and it also throws exceptions
when the network isn't present. (Our AsyncRequest does too, tsk tsk.)
enable mouse wheel

For some obscure reason, the Windows version couldn't receive mouse
events when the window didn't have focus, so we had to do deep magic to
capture the mouse globally and pass those events into JS by hand. That
probably wouldn't have been necessary here, but JS expects it now, so we
need to raise the event. Balls indeed.
enable disk cache for the web views