* Extends AsyncIO IO manager to support server-side operations;
* Adds more logic to AsyncSocket class;
* Implements an AsyncIO server that can serve unary-unary handlers;
* Adds a server test with grpc.aio.Channel;
* Support both Bazel / setup.py build.
The code used to detect if a program was running on Windows by launching
a powershell script (which requires powershell to be installed), writing
the output to a file with a fixed name (which requires write permissions
in the local directory), and then reading the file (which may have
changed), and then deleting it (which may fail and introduces a race
with any other program running in the same directory).
This version reads a key from the Windows registry. That could fail if
the application does not have permissions to read the registry, but at
least does not crash when it does, and it is not inheritently racy.
Allow passing the ``timeout`` parameter to the asynchronous version of
the ``unary_unary`` call, and use it accordingly.
Maintains the same interface as the synchronous version.
Other changes:
* Remove default parameters from the internal API methods
* Make keyword-only arguments in the external-facing public API
Create new exception: ``AioRpcError``.
Define the exception in Cython, exposing a similar interface that the
one returned by the synchronous API (``grpc.RpcError``).
Then mix the class with the ``grpc.RpcError``, dynamically: this can
only be done at run-time because it's not possible to use the Cython
class until all Cython code has been compiled, which happens after the
``grpc`` module has been loaded.
The new ``AioRpcError`` exception lives inside the ``experimental``
module.
Fixes https://github.com/grpc/grpc/issues/19871