Goodbye threads. Welcome async.
Features
* Dropped internal threads in favor of async coroutines.
* Event callback functions can be declared as either normal function or coroutine functions
Breaking changes
* Removed `non_blocking` decorator.
* Both server and client entrypoint are coroutines now. The have to be run in asyncio loop ie. with `asyncio.run()`.
Fixes
* Fixed a lot of type annotations
* Fixes in logging