* feat: allow setting window shape
This binds Widget::SetShape, an API that already exists in Chromium (for
Windows and Linux). It's a more reliable method of having some parts of
your window be "click-through" than the current `setIgnoreMouseEvents`
API, which messes around with the `WS_EX_LAYERED` window style on
Windows, causing strange bugs and incompatibility with hardware
acceleration.
* update docs
This didn't actually cause any issues because there is only one listener
for the affected methods right now. Should we have added more, the last
called observer would have overwritten `prevent_default`. Lets only set
it when necessary to avoid this footgun in the future.
* Add atom::api::TopLevelWindow
* Make BrowserWindow inherit TopLevelWindow
* Fix reading from wrong weak map
* Read options after setting content view
* OnWindowClosed is not guarenteed to run now
* Fix the offscreen hack in BrowserWindow
* Fix building on Linux
* Fix tests on Linux
* Fix building on Windows