build: default to using -O2 for release builds

The -O3 optimization level can often lead to dangerous (and sometimes
incorrect) optimizations being performed.  So let's use a level that's
more stable.
Revert "build: don't download and extract tarball if source is already present"

This reverts commit 90658982644b76a9e8e4abfbcd16450df26b0a32.

It failed to work correctly on a fresh clone.  See #1433.
build: don't download and extract tarball if source is already present

When building under Homebrew, we want to let Homebrew manage
downloading and extracting the tarballs. See PR #1411.

Also make sure to skip only if directory is not empty. Fix #1433.
Merge pull request #1434 from xu-cheng/fix-1433

DownloadAndExtractFile.cmake: only skip if directory is not empty.
Merge pull request #1426 from jszakmeister/change-release-opt-default

build: default to using -O2 for release builds
CMake: Set custom RelWithDebInfo compile flags.
Merge pull request #1383 from fwalch/nvim-buildtype

CMake: Set custom RelWithDebInfo compile flags.
eval: Allow setting vim variables of UNKNOWN type
fileio: Extract `should_expand_filename` from `apply_autocmds_group`
fileio: Refactor `has_autocmd` to work with patterns that aren't files

has_autocmd can be used if there are autocommands matching a certain filename.
Some autocmd events use patterns that aren't filenames, allow has_autocmd to be
used with them.
eval: Add v:provider_args/v:provider_result variables
fileio: Add ProviderCall autocommand
eval: Add eval_call_provider/eval_has_provider functions

These functions use the v:provider_args/v:provider_result and the ProviderCall
autocommand to replace the provider_call/provider_has functions, moving the
implementation of providers to pure vimscript(we lose nothing since vimscript
can also call msgpack-rpc functions).
eval/ex_cmds2/ops: Implement providers with eval_call_provider

Replace references to provider_call/provider_has with the new functions
eval_call_provider/eval_has_provider.
Remove os/provider.{c,h} and all of its references
eval: Use scope information from provider caller in rpcrequest

When running the rpcrequest function from a ProviderCall autocommand,
temporarily switch to the caller scope.

The reason for that is because we want to trat rpcrequest calls made from
ProviderCall autocommands as if they were direct calls to the
`channel_send_call` function(ProviderCall will be used to implement old ex
commands that expect this behavior, since they were previously implemented in C)
test: Fix nondeterminism in interleaved notifications test

Protect `rpcnotify` call in a condition to avoid having a notification leak into
other tests.
runtime: ProviderCall implementations

- Move the python provider implementation(script_host.py) from the python-client
  repository to this one
- Implement python provider with ProviderCall
- Implement clipboard provider with ProviderCall
- Add runtime scripts for working with external plugins and hosts
- Add tests for the new runtime scripts