[WIP] Refactor plugin system

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

We should establish a habit of leaving hints for diagnostic purposes. Either `echom` a warning or add it to a list that can be printed. Probably just adding it to `:mes` is predictable and accessible.

    echom 'provider: clipboard: no clipboard service found'