Set up the core run loop and the GTK loop. To make this work, I'm taking direct control of the Tokio runtime.
Since the GTK thread wants to be the main one, it's easier to manually spawn the runtime handlers and to spawn new tasks to handle communication with the core. I added a basic struct to own the runtime, the core, and communication between the core and GTK