Breaking changes
Alters the `time_provider` to notionally store time in seconds, so as to match `asyncio.sleep`. In practice, all that really changes is the formatter, and you could use time in whatever units you like as long as you avoid using the `get_time_formatted` method.
New features
Adds support for using `asyncio` to build a discrete event simulation. This allows you to call `asyncio.sleep` to simulate time passing (e.g. machinery moving), and also await on instances of `asyncio.Event`. See tests/test_asyncio_des.py for an example.