gh-38374: Add framework for key exchange schemes and Diffie-Hellman
Motivated by (but does not yet close) #37305. Closes #11568.
This PR adds a basic framework to add public key exchange schemes to
Sage, and includes an implementation of the Diffie-Hellman primarily as
an example of this new framework.
Open to suggestions to improve the structure of the code. This code was
based on the existing code for public-key encryption in Sage.
### :memo: Checklist
<!-- Put an `x` in all the boxes that apply. -->
- [x] The title is concise and informative.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation and checked the documentation
preview.
### :hourglass: Dependencies
None
URL: https://github.com/sagemath/sage/pull/38374
Reported by: Vincent Macri
Reviewer(s): grhkm21, grnx, Vincent Macri