Implement generic map on top of khash

Implement a generic string->pointer associative array on top of the khash macro
library, providing a nice API for simple hash table requirements. (khash gives
lot of control with a not-so-friendly API, which is unnecessary on most cases)
Add helpers for accessing data in libuv handles

Libuv handles have a single generic pointer for storing user data, this adds
some functions for adding/retrieving pointers to "slots" in the new `HandleData`
structure, which increase flexibility when using shared handles(job streams for
example)
Refactor modules to use handle data accessors

The job, rstream and wstream modules now use handle data accessors
Add teardown function for the event.c module

Also move the `job_teardown` call from os_unix.c to the event module
Fix update of pending_reqs in `write_cb`
Refactor API types and prototypes

- Split functions with multiple files in the 'api' subdirectory
- Move/Add more types in the 'api/defs.h' header
- Add more prototypes
- Refactor scripts/msgpack-gen.lua
- Move msgpack modules to 'os' subdirectory
Add channel module

- Add channel module that exposes the API over arbitrary streams
- Add `xmemdup` for duplicating memory chunks
- Make job exit callback optional
Add server module for accepting API connections

The `NEOVIM_LISTEN_ADDRESS` environment variable can be set to customize the
address where Neovim will listen for connections. If it's not set, a random
socket/pipe will be created, and the `NEOVIM_LISTEN_ADDRESS` will be updated
accordingly.
Fix jumps depending on unitialized values

Reported by valgrind
API: Implement vim_command
API: Implement vim_eval

The vimscript object conversion function was adapted from the version found in
'if_py_both.h' in the upstream source. It was also required to re-add the
`dict_lookup` function that was lost during the initial import.
API: Implement vim_strwidth
API: Implement vim_list_runtime_paths
API: Implement vim_change_directory
API: Move helper functions to another module
API: Implement buffer_{get,set}_line
API: Extract error boilerplate into a macro
API: Implement vim_set_current_line
API: Move vim_to_object to helpers.c
API: Implement vim_{get,set}_var