[WIP] Refactor plugin system

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

I considered doing this, but decided against it for a couple of reasons:

- A "feature" would need a variable number of functions to be implemented(clipboard requires 2 and python requires 4). For consistency in the feature-checking mechanism I thought it was better to encapsulate everything in one function
- Most providers will simply dispatch `method`/`args` the via msgpack-rpc, using one function is cleaner in these cases

> It's faster (find_func uses hash_find instead of depending on #Call() to implement an if-elseif-else tree)

I don't think this is faster than comparing a small number of strings. Let's not forget that hash functions also have to walk all characters and the benefit only stands when the number of possibilities is high. Even in a scenario where a provider has a lot of methods, one can easily use a vimscript dict to contain the actual implementations keyed by method name