Add a background task that periodically refreshes OAuth tokens before
they expire, preventing users from having to re-authenticate when MCP
OAuth tokens (like Notion) expire after 1 hour.
Changes:
- Add get_expiring_sessions() method to OAuthSessionTable to query
sessions expiring within a specified time window
- Enhance OAuthClientManager._perform_token_refresh() to handle
unregistered MCP clients by discovering OAuth info from stored
tool server config
- Add periodic_oauth_token_refresh() background task that runs every
5 minutes and refreshes tokens expiring within 10 minutes
- Start the background task in app lifespan with proper cleanup
Fixes#19809