This solves the issue where having a gamepad connected to a machine
running tests would cause different results for a few gamepad-related
tests.
Conveniently, all our fake testing gamepads are "virtual" in SDL, and
those are the only virtual ones.
We fire a single shot timer to wait for the rumble to complete, so we
can call on_complete. SDL keeps an internal account of how long the
rumble should take and might, at that point, still be convinced the
gamepad should rumble. To prevent this race condition, explicitly cancel
the rumble ourselves.
Hopefully fixes the flakiness of
`Tests/LibWeb/Text/input/GamepadAPI/gamepad-rumble.html`.
We have to prevent from including any SDL headers in LibWeb headers.
Otherwise there will be transitive Windows.h includes that will
re-declare some of our existing forward decls/defines in
LibCore/SocketAddressWindows.h