I'm not sure I'm following the purpose of runOnPeerThread.
Is it just trying to evaluate this spanIO_task function, but on the UI thread, in adb-pure.js?
Can we send an event and move spawnIO_task function into adb-pure.js instead of doing this magic?
```
let spawnIOfn = function spawnIO(t_ptr) {
  debug("spawnIO was called from C, with voidPtr: " + t_ptr.toString()); 
  worker.emitAndForget("spawn-io", {t_ptr_str: t_ptr.toString()});
};
```
```
const WORKER_URL_IO_THREAD_SPAWNER = ...;
...
serverWorker.onceAndForget("kill-server-fd", function({ fd }) {
  server_die_fd = fd;
});
serverWorker.onceAndForget("spawn-io", function({ t_ptr_str }) {
  let inputThread = serverWorker.newWorker(WORKER_URL_IO_THREAD_SPAWNER, "input_thread");
  inputThread.emitAndForget("init",
        { libPath: context.libPath,
          threadName: "device_input_thread",
          argTypesStrings: ["atransport.ptr"],
          argStrings: [t_ptr_str],
          platform: context.platform,
          driversPath: context.driversPath
        }); 
   ...
});
```