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.
You should abstract this behind a function like `OnBufferVisitInternal` or whatever. Then that would check for `is_nvim` and call `send_event` or `ycm_state.OnBufferVisit`