* **Breaking change *(mautrix.util.formatter)*** Made `MatrixParser` async
and non-static.
* Being async is necessary for bridges that need to make database calls to
convert mentions (e.g. Telegram has username mentions, which can't be
extracted from the Matrix user ID).
* Being non-static allows passing additional context into the formatter by
extending the class and setting instance variables.
* *(util.formatter)* Added support for parsing
[spoilers](https://spec.matrix.org/v1.1/client-server-api/#spoiler-messages).
* *(crypto.olm)* Added `describe` method for `OlmSession`s.
* *(crypto)* Fixed sorting Olm sessions (now sorted by last successful decrypt
time instead of alphabetically by session ID).
* *(crypto.store.asyncpg)* Fixed caching Olm sessions so that using the same
session twice wouldn't cause corruption.
* *(crypto.attachments)* Added support for decrypting files from
non-spec-compliant clients (e.g. FluffyChat) that have a non-zero counter
part in the AES initialization vector.
* *(util.async_db)* Added support for using Postgres positional param syntax in
the async SQLite helper (by regex-replacing `$<number>` with `?<number>`).
* *(util.async_db)* Added wrapper methods for `executemany` in `Database` and
aiosqlite `TxnConnection`.
* *(bridge)* Changed portal cleanup to leave and forget rooms using double
puppeting instead of just kicking the user.