improve error handling and graceful shutdown
- Standard way of wrapping errors so we can use it in the frontend
- Graceful shutdown by trying to close all outstanding loops, executors, and processes
- Not ideal yet: have to wrap every endpoint function (because starlette says their BaseMiddleware is not threadsafe)
Edited by Tim Repke