Migrate input/signal/sleep code to libuv

Reimplement user input, signals handling and sleep on top of libuv.

The event loop runs in a background thread, started very early by 'io_start'.
Mutexes/condition variables were used to emulate the current blocking interface
needed by the rest of the code.

Here's a list of changes performed:

- A new function `io_read`, replaces the `read` system call interface when
  reading from stdin(or stderr when stdin is a pipe).
- Reimplement `mch_inchar`, `mch_delay` and `mch_char_avail` using libuv
  objects.
- Move `mch_exit`, `mch_breakcheck` `mch_inchar`, `mch_delay` and `mch_char_avail`
  to modules under the 'os' directory.
- Signals are now intercepted by libuv and delivered synchronously to the main
  thread as 'special keys'(Similarly to how the `CursorHold` event is implemented).
  The actual code for handling signals was moved to signal.c.
- Remove unused functions in os_unix.c
- Travis will run an extra parallel build with the thread sanitizer enabled.
- Add option to generate static executable(for debugging core dumps sent by
  users)