Fixes #5299.
-connect and -addnode can both try to open the same manual connection during startup.
Existing duplicate checks only see peers after they have been inserted into m_nodes, so two concurrent manual dial attempts can both pass the checks and create duplicate connections.
Fix this by reserving a manual connection destination before connecting in OpenNetworkConnection().
The reservation is cleared after a failed connection, or after a successful node has been added to m_nodes, where the existing connected-peer checks take over.
This is intentionally limited to ConnectionType::MANUAL, covering -connect, -addnode, manual reconnections, and one-shot manual RPC connection attempts only.
Note that this does not try to prevent automatic outbound connections to addnode peers like 21f8426c823fd83c40fd81f08ff2bf39ec6a4575 from #28428 does.
A functional regression test is added for the startup case where two nodes each configure the other with both -connect and -addnode. This fails before the fixing commit is applied.
In comparison to #27804 this approach tracks in-flight manual connection attempts in OpenNetworkConnection(), instead of de-duplicating configuration arguments, which should be much less-brittle. Once the connection succeeds, the existing m_nodes duplicate checks take over.
The remaining limitation is that hostnames are keyed by the original string, not resolved IPs. So -connect=example.com and -addnode=<resolved-ip> are not guaranteed to dedupe during the in-flight window, but I don't want to add DNS lookups in here, so I consider this acceptable.