* use better typing for on_load * make app dataclass * get it right pyright * make lifespan into a dataclass
* split lifespan and middleware logic in separate mixin files * fix for 3.8 * fix for unit tests * add missing sys import --------- Co-authored-by: Masen Furer <m_github@0x26.net>