New features
- Added two new mini alignment options - identity and similarity plots
Identity plots show which positions in your alignment are identical to the consensus, different to the consensus or gaps. Created using the `--plot_consensus_identity` parameter.

Similarity plots calculate a substitution score for your alignment vs the consensus, using a substitution matrix of your choice, and colour the plot according to this score. Created using the `--plot_consensus_similarity` parameter.

- Added additional statistics plots, plotted by default when `--plot_stats_input` or `--plot_stats_output` is specified.
- The nucleotide or amino acid frequency in the alignment and, for nucleotide alignments, the A/T (U) vs C/G ratio

- For nucleotide alignments, the proportion of each "change" in nucleotide relative to the consensus.

- Added the option to remove sequences with duplicate names from the alignment, keeping either the first or last instance of each sequence name, with the parameter `--deduplicate_ids`.
Testing, Packaging and Documentation
- Updated CI workflow to cover more recent versions of Python
- Changed all requirements in package to require a minimum rather than fixed version of software
- Various updates to tests using images to work with latest version of pytest
- Minor updates to readthedocs build
Debugging
- Minor debug to crop_divergent to run remove_gap_only by default afterwards
- Improved markup for remove_gap_only
- Adjustment to move Q amino acids slightly higher in sequence logos
- Removed error sometimes raised if no cleaning functions are run
- Updated utilityFunctions.listFonts() as the matplotlib method used here was deprecated