This PR adds a wallet interface for derivehdkey.
The motivation is the same as #35436 and #34861. The derivehdkey RPC exists (#32784), but the GUI does not go through RPC, so the logic is currently out of its reach. A dedicated wallet interface makes it available for multisig setup. Alongside the addhdkey interface, this lets the GUI add an HD key and derive a shareable xpub from it. Tracked as the deriveHDKey item in #35645.
Key changes:
- Move the key selection and derivation logic from the RPC into CWallet::DeriveHDKey, including the wallet and argument checks.
- Have the RPC call CWallet::DeriveHDKey and translate its WalletError using HandleWalletErrorCode.
- Add interfaces::Wallet::deriveHDKey, which returns the derived xpub and key origin. Private materials are not exposed through the interface.
- Add interface tests for derivation and error forwarding. Update the functional tests for the changed error codes and unlock message.