Simple Split 2-iter loop: msg_show_console_dialog

Simply spliting the 2-iter loop into code for computing
size of memory & for copying to allocated memory
Add new functions for memory alloction & data copy

From msg_show_console_dialog(), a new function was created
for memory allocation for hotkeys & dialog string.
Similarly, another function created for copying hotkeys
& dialog string.
Style corrections in the two new functions

Style changes in the two new function:
cpy_hotkeys_and_msg() & console_dialog_alloc()
Merge #688 'Refactoring of two-iteration anti-pattern in msg_show_console_dialog()'
Add --with-pic flag to msgpack configuration
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