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
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
API: Implement vim_{get,set}_option

Some functions from upstream VIM were reintegrated for this:
- get_option_value_strict
- set_option_value_err
- set_option_value_for
- unset_global_local_option
API: Implement vim_{out,err}_write
API: Implement vim_get_buffer_count
API: Implement buffer switching functions
API: Implement window/tabpage switching functions

Also moved `find_buffer` to 'api/helpers.c' and removed unnecessary declaration
in 'window.h'
API: Implement buffer_get_length