[WIP] Refactor for the new Nvim plugin specification

This is PR is going in parallel with neovim/neovim#1335. Its a python implementation of a external plugin specification I'm writing based on the ideas given by many contributors.

On the python side, here is a summary of changes:

- the ScriptHost plugin has been moved to the main neovim repository, from the POV of this library it is a plugin like any other
- there's no automatic discovery/loading of plugins. It is best to reuse Vim plugin discovery instead of delegating that as an implementation of every plugin host
- decorators are used for declaring plugins and method handlers(this had been suggested in another PR by @bfredl / @jdavis).
- eventually the decorators will take care of registering the necessary vimscript boilerplate, after this it will be possible to develop plugins writing no vimscript code
- plugins don't need to be classes, they can be plain modules and the functions get the nvim object as first argument
this is not correct, as this is expected to be an iterable in `on_notification`, a fix would be to initialize
`self._notification_handlers = collections.defaultdict(list)`
and then here use
`self._notification_handlers[fn._nvim_rpc_method_name].append(fn)`