[RFC] Reimplement input functions on top of libuv

Functions that interact with `read_cmd_fd` were implemented on top libuv, using
`uv_run()` in conjunction with `UV_RUN_ONCE`.

This the input-related code extracted from #289 work, refactored to use a single thread. This is much simpler than listening for input from a background thread, while also letting us use libuv infrastructure for listening events from multiple sources without the added multithreading complexity. For example, this branch won't have the SIGTTIN problem detected by @oni-link, since there's no background thread reading input when Neovim starts a shell in the foreground.

RFC from @oni-link @mahkoh @philix @saghul @lslah @stefan991