[WIP] Refactor plugin system

This supersedes #1335, using funcrefs instead of autocommands to implement providers(it is cleaner and requires less changes).

> A "feature" would need a variable number of functions to be implemented(clipboard requires 2 and python requires 4).

This doesn't seem like a disadvantage to me, rather it structures the `provider.vim` more clearly. Compare:

```vim
function! provider#clipboard#get(...)
  "...
endfunction
function! provider#clipboard#set(...)
  "...
endfunction
```

to

```vim
let s:methods = {}
function! s:methods.get(...)
  "...
endfunction
function! s:methods.set(...)
  "...
endfunction
function! provider#clipboard#Call(...)
endfunction
```

> Most providers will simply dispatch method/args the via msgpack-rpc, using one function is cleaner

I don't see this, because the method can be looked up using Vim's already-existing method lookup. For example, if clipboard `get` is requested, `find_func` finds it. Then the args are simply passed to the variadic function `provider#clipboard#get(...)`. Note that `...` allows the args to be unpacked in vimscript using `a:1`, `a:2`, etc.