[WIP] msgpack: Recognize buffers, windows, tabpages, and notifications.

One day it dawned on me that we could start an embedded nvim instance with `rpcstart()`
```vim
let vim = rpcstart('nvim', ['--embed'])
```
and send commands from within the parent nvim instance!
```vim
call rpcrequest(vim, 'vim_set_current_line', 'SOME TEXT')
echo rpcrequest(vim, 'vim_get_current_line')  " Prints SOME TEXT
```
but that attempting to get a list of windows, buffers, or tabpages would hit an `abort()` from `object_to_vim()`.
```vim
echo rpcrequest(vim, 'vim_get_buffers')
echo rpcrequest(vim, 'vim_get_tabpages')
echo rpcrequest(vim, 'vim_get_windows')
```
This PR makes the above lines not trigger that abort. Inspired by [vim-misc's xolox#misc#os#exec()](https://github.com/xolox/vim-misc/blob/master/autoload/xolox/misc/os.vim#L82), which spawns another vim instance in order to execute commands asyncronously.
No. According to the [msgpackrpc specs](https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md), a request must be in the form `[type, msgid, method, params]` and a notification in the form `[type, method, params]`.

I intend to add a few helper functions to make the logic more obvious.