gh-36493: improve method `cycle_basis` for graphs with multiple edges
We use the notion of nearest common ancestor in a tree to find cycles
more efficiently than using DFS.
This is used only when the graph allows multiple edges, since otherwise
we use the method of networkx. Therefore, the failing doctests reported
in #36486 when using networkx 3.2 are independent from the changes done
here.
An additional optimization would be to determine the minimum spanning
tree, the ranks and the parents at the same time. We don't do it here.
### :memo: Checklist
<!-- Put an `x` in all the boxes that apply. -->
<!-- If your change requires a documentation PR, please link it
appropriately -->
<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
<!-- Feel free to remove irrelevant items. -->
- [x] The title is concise, informative, and self-explanatory.
- [x] The description explains in detail what this PR is about.
- [ ] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation accordingly.
### :hourglass: Dependencies
<!-- List all open PRs that this PR logically depends on
- #12345: short description why this is a dependency
- #34567: ...
-->
<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
URL: https://github.com/sagemath/sage/pull/36493
Reported by: David Coudert
Reviewer(s): Kwankyu Lee