When yfinance hits Yahoo Finance rate limits (429 Too Many Requests),
the data fetch fails immediately and the Market Analyst agent loops
endlessly. This adds a simple retry wrapper with exponential backoff
(2s, 4s, 8s) that catches rate limit errors and waits before retrying.
Addresses #415
Add _clean_dataframe() to normalize stock DataFrames before stockstats:
coerce invalid dates/prices, drop rows missing Close, fill price gaps.
Also add on_bad_lines="skip" to all cached CSV reads.