Eliminates ~50 lines of duplicated pipe+thread+poll boilerplate between
_ModalProcessHandle and _DaytonaProcessHandle. Both now use closures
passed to the shared _ThreadedProcessHandle in base.py.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>