Add Leiden modularity optimization
1. Replace Louvain modularity optimization (from the deprecated `louvain-igraph`) with Leiden (from `leidenalg`).
2. Update documentation and resolve deprecated uses of `scipy`, `matplotlib`, and `random.sample`.
3. Drop support for Python 3.7, matching much of the Python scientific community.
Overall, this should make the single-layer functions faster and multi-layer functions faster when the number of layers is small. As the number of layers grows, the inefficiencies of the `leidenalg` implementation will eventually make the algorithm extremely slow. As such, we keep the legacy Louvain multi-layer functionality in `modularitypruning.louvain_utilities`.
By dropping support for Python 3.7, the dependency lists are greatly simplified (many of our dependencies, including numpy and scipy, stopped supporting 3.7 last year).
**Full Changelog**: https://github.com/ragibson/ModularityPruning/compare/v1.2.3...v1.3.0