Enhancements for Neovim

This PR contains some enhancements that will make YCM run better on Neovim, which uses a separate process for running python code.

Here's a summary of the changes:

- Calls to the magic vim module have been reduced in order to lower the communication overhead between the python process and Neovim(It won't impact vim performance)
- A new class which is automatically loaded by the python process(NvimYcmAsyncHelper) was added. This class handles events from Neovim and callbacks from ycmd requests.
- Neovim `send_event` function is used to notify the python process about events. This was done because the `python` command blocks Neovim until the python process responds.
- Instead of polling for compilation/completion results, NvimYcmAsyncHelper directly calls Neovim once ycmd responds. For Neovim, the `complete()` vimscript is used to display completions asynchronously('omnifunc' is not touched)

I've posted this for review, but it's not ready for merging yet. I'm still stabilizing the Neovim branch which supports python plugins, so there may be some minor changes to this code. I'm also going to improve commit messages and descriptions.
I'm strongly against adding more vimscript code to YCM. I've been moving logic out of vimscript and into Python because it's both easier to test and maintain that; pulling logic back into vimscript is a major regression.

Is there really no way to easily run Python code inside the neovim process? If true, IMO you're setting back Vim plugin development then. If the only way to talk to Python in neovim is with costly communication overhead, that's a _major_ issue. I've talked to several developers of popula Vim plugins and _everyone_ hates writing (and especially maintaining) VimScript.