feat: implement .museignore — gitignore-style snapshot exclusion (#7)
Adds .museignore support so users can declare which workspace files are never committed, identical to .gitignore syntax.
- muse/core/ignore.py: pure parser (load_patterns) and filter (is_ignored) with full gitignore semantics — globs, **, negation, anchored patterns, directory-only patterns, last-rule-wins - MusicPlugin.snapshot(): reads .museignore from repo root and filters excluded paths before hashing; dotfiles remain unconditionally excluded - muse/domain.py: documents the .museignore contract in the MuseDomainPlugin.snapshot() docstring so all domain authors know they must honour it - docs/reference/museignore.md: full format reference with examples for music, genomics, simulation, and spatial domains - tests/test_core_ignore.py: 41 tests covering load_patterns, _matches internals, is_ignored rule evaluation, and end-to-end MusicPlugin.snapshot() integration
Co-authored-by: Gabriel Cardona <gabriel@tellurstori.com>