`Surface.init` is the main wiring point. It derives config, computes font and grid sizing, initializes the
renderer, creates the renderer thread, creates the IO thread, initializes the exec backend, creates the
SPSC termio mailbox, and finally starts both worker threads.
var io_mailbox = try termio.Mailbox.initSPSC(alloc);
try termio.Termio.init(&self.io, alloc, .{
.backend = .{ .exec = io_exec },
.mailbox = io_mailbox,
.renderer_state = &self.renderer_state,
.renderer_wakeup = render_thread.wakeup,
.renderer_mailbox = render_thread.mailbox,
.surface_mailbox = .{ .surface = self, .app = app_mailbox },
});