Replace black, isort, and flake8 with ruff
Consolidate three separate lint/format tools into one. Ruff handles
formatting, import sorting, and linting with auto-fix support, so
`make format` now fixes issues like unused imports automatically.
- Remove black, isort, flake8 deps (+ 4 transitive); add ruff
- Merge .flake8 config into pyproject.toml [tool.ruff] section
- Update Makefile format/ci targets to use ruff
- Fix two pre-existing unused imports (os, get_facets)
- Correct target-version from py39 to py310
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>