SendContact
Sends a shared contact (identity + public key) to the firmware's NodeDB.
The result deferred is completed with true when the radio acknowledges the admin packet, or false on timeout/failure. Callers that need to guarantee the contact is stored before sending a subsequent DM should await() this deferred.
Not a data class: result is a CompletableDeferred with identity-based equality that would break data class equals/hashCode/copy semantics.