Synchronous unload code works around unload bug!

* adb-blocking-native uses ctypes from the UI thread
* adb-types was refactored so it could be imported from the UI thread and
a worker
* Since the unload code needs to communicate over a file descriptor,
some IO operations were moved into io-utils so that they can also be
used in a worker