v2.1.0 — Security audit fixes + V4 format + GUI cancel + Android CI

Major release focused on security hardening based on a full audit:

P0 (critical):
- Android WIPE buttons require confirmation dialog
- JNI file-descriptor leak fix (File::from_raw_fd wraps fds immediately)
- CLI --password-file returns Zeroizing<Vec<u8>> (fixes UTF-8 leak, enables binary keys)

P1 (correctness):
- V4 format (VAULTX04) with AAD on header — closes audit finding 5-1
- GUI Cancel button for single-file and batch operations
- V2 stream-decrypt 1 GiB limit inconsistency fixed
- Drop-during-Processing state corruption fixed
- Batch re-encrypt safety check (skip .vx2 files in encrypt mode)
- MainActivity type-safe getParcelableExtra (API 33+)

P2 (hygiene + tests):
- 22 new tests (13 V3 edge cases + 9 V4 tests) — 38 total, all pass
- MAX_V3/V4_FILE_SIZE guard (4 PiB BE32 counter limit)
- URI permission pruning at startup
- SHA-256 of ciphertext (not plaintext) in success screen
- AndroidManifest: allowBackup=false, fullBackupContent=false
- JNI panic=abort removed (catch_unwind now works)
- JNI cancel detection via ErrorKind::Interrupted (not string compare)
- unsafe set_var wrapped with SAFETY comment
- constant_time_eq doc warning about length leak

CI:
- Android CI now lints+tests both core and JNI crates
- New android-release.yml workflow for tag-triggered APK releases

Android:
- minSdk lowered 26 -> 24 (Android 7.0+ support)
- Values-v27 overlay for windowLightNavigationBar

Website:
- New /docs folder with static marketing site for GitHub Pages

Test results:
- cargo test --lib --release: 38/38 pass in 26.78s
- cargo clippy --all-targets -- -D warnings: clean (both crates)
- cargo fmt --check: clean (both crates)

Backward compatibility:
- V2 (VAULTX02) and V3 (VAULTX03) files remain fully readable
- New encryptions default to V4 (VAULTX04) with AAD-authenticated header