Rework input handling; no functional changes.

Instead of using halfdelay() and relying on GETCH() to return, poll for
input ourselves using select() and only call GETCH() when input is ready.

On Darwin, use kqueue instead of select.  This allows us to receive IOKit
notifications directly to the main thread, instead of having a separate
thread dedicated to that.  We also no longer link to CoreFoundation.