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
Implement `vim_get_var` API function
Implement `vim_set_var` API function
Implement `vim_get_option` API function

The `get_option_value_strict` function from the upstream source was
reintegrated for this.
Implement `vim_set_option` API function

The `set_option_value_err`, `set_option_value_for` and
`unset_global_local_option` functions were re-integrated from upstream.
Implement `vim_{out,err}_write` API functions