split apart dependencies of vaccine peptide selection

* added unit tests for individual ranking components
* vaccine peptide sorting by four criteria (mutant epitope score, negative wildtype epitope score, number mutated residues, distance of mutation start the edge of vaccine peptide)
* print and write FASTA of vaccine peptides with a little mutation metadata
* print epitopes associated with each mutation
Confusing to me me that skip_thymic_deletion also skips the part of immunogenicity.py that does this:

        peptides_df["Immunogenic"] = \
            ~peptides_df[THYMIC_DELETION_FIELD_NAME] & \
            (peptides_df[IC50_FIELD_NAME] <= self.binding_threshold)