[RFC] Expose api endpoints

This is still a WIP(some functions still need to be implemented), but I don't think there will be significant changes to the architecture. My goal with this PR was not only expose the API to remote clients, but also decouple it from msgpack-rpc and make it very simple to extend with minimal impact on Neovim or client libraries. The last few commits should serve as examples of how easy is to add or modify functions

I'm still considering if the new bindeval API(introduced in 7.4) should be added, as it would require managing objects lifetime in the server AND the client, which could make things ugly. I couldn't find much use for this API: why would someone need manipulate vimscript data structures from python? In any case I would appreciate the opinion of python plugin developers such as @Valloric, @SirVer and @ZyX-I

Those interested can already play with the API using the [python client](https://github.com/neovim/python-client)(pip install neovim)Here's an example with the python REPL:

```
>>> import neovim
>>> client = neovim.Client(neovim.UvStream('/tmp/neovim'))
>>> client.discover_api()
>>> vim = client.vim
>>> vim.eval('g:')
>>> vim.command('echo 123')
>>> vim.err_write('error!\n')
>>> vim.set_var('list', [1, 2, 3])
>>> buf = vim.get_current_buffer()
>>> buf.set_line(1, 'abc')
```

Clearly this still needs some tweaking to make it match the original python-vim API. Another thing still missing is making the `vim` object thread-safe.