[WIP] Refactor plugin system

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

Could this look for `provider#name#method` instead of depending on `#Call()` to do the "dispatching" in vimscript? This would have a few benefits:

- It's slightly faster (`find_func` uses `hash_find` instead of depending on `#Call()` to implement an `if-elseif-else` tree)
- We know immediately if the provider is "fully specified" (i.e., all required methods are implemented: `provider#clipboard#get`, `provider#clipboard#set`), so we can show a better warning/error
- It structures the `provider/foo.vim` code: <br/>
```vim
function! provider#clipboard#get(...)
  "...
endfunction
function! provider#clipboard#set(...)
  "...
endfunction
```