36dddf2300
ReaderPool is now generic over R: Read + Send + 'static so it can accept std::fs::File (host/test) or a libredox::Fd-based adapter (production). OwnedFd wraps a duplicated raw fd via dup(2) for worker-thread ownership. Adds proptest dev-dependency for property tests. Step toward CORE-C12: real parallelism on the hot path.