feat: add FastAPI pattern detection endpoints (Section 1)
- Extract CDL pattern detection logic into services/ml/app/patterns.py
with TALIB_PATTERNS dict, get_available_patterns(), validate_pattern_names(),
and detect_patterns(candles, pattern_names) functions
- Add GET /patterns/available endpoint returning all 54 supported CDL pattern
names with display names
- Add POST /patterns/detect endpoint accepting {candles, patterns}, running
selected CDL functions, returning span annotations with source "talib"
- Add input validation: reject invalid pattern names with HTTP 400,
treat empty patterns list as "run all"
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>