feat(vdb): add `vdb menu` (Textual TUI), lazy textual import
Completes the v1 command surface. Builds on !6 (merged)–!9 (merged).
vdb menu launches the Setup/Index/Git/Backups/Ignore TUI by loading scripts/vdb-menu.py via engines.load_menu() and running VaultApp. That module is the only thing that pulls textual — config/status/index/serve/dev-tools never touch it (verified: the status path leaves textual out of sys.modules).
Menu doubles as the setup tool for a brand-new vault, so an unresolved vault is not an error: falls back to ./vdb-config.yaml. Missing textual → friendly install hint, not a traceback.
tests/test_vdb_menu_cmd.py covers config-path precedence and boots the loaded VaultApp under Textual Pilot. Full suite green.