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

Currently one server listening on a random address is started automatically, but
we may add facilities to listen on more addresses(through command-line flags or
vimscript functions for example)
Fix jumps depending on unitialized values

Reported by valgrind
Implement `vim_command` API function
Implement `vim_eval` API function

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.
Implement `vim_strwidth` API function
Implement `vim_list_runtime_paths` API function
Implement `vim_change_directory` API function
Move API helpers to it's own module
Implement `buffer_get_line` API function
Implement `buffer_set_line` API function
Extract API error boilerplate into a macro
Implement `vim_set_current_line` API function
Move `vim_to_object` to the api/helpers module