Part of #19303.
Replace m_bloom_filter_mutex and m_tx_inventory_mutex in Peer::TxRelay from RecursiveMutex to Mutex. Neither mutex is acquired recursively anywhere in the codebase - all 18 lock sites are first-time acquisitions within their call contexts.
To support the Mutex conversion with explicit thread-safety contracts, this PR adds annotated TxRelay helper methods and LOCK_RETURNED accessors for the remaining net_processing lock sites, routes SendMessages() txrelay mutations through those helpers, makes the mutex members private, and records the stable m_tx_inventory_mutex -> m_bloom_filter_mutex lock order with ACQUIRED_BEFORE / ACQUIRED_AFTER.
In SendMessages(), both mutexes are still used together: m_tx_inventory_mutex is held as the outer lock while m_bloom_filter_mutex is locked separately for three short sections. These are two different mutexes, not recursive acquisition of the same one.