code: static <S extends Sequence<C>, C extends Compound> List<ProfilePair<S, C>>
  			runProfileAligners(List<ProfileProfileAligner<S, C>> aligners) {
  		int n = 1, all = aligners.size();
  		List<Future<ProfilePair<S, C>>> futures = new ArrayList<Future<ProfilePair<S, C>>>();
  		for (ProfileProfileAligner<S, C> aligner : aligners) {
  			futures.add(ConcurrencyTools.submit(new CallableProfileProfileAligner<S, C>(aligner),
  					String.format("Aligning pair %d of %d", n++, all)));
  		}
  		return getListFromFutures(futures);
  	}
docs: Factory method to run a list of alignments concurrently.  This method runs the alignments in parallel by
  submitting all of the alignment tasks to the shared thread pool of the {@link ConcurrencyTools} utility.
  
  @param <S> each {@link Sequence} of the {@link Profile} pair is of type S
  @param <C> each element of an {@link AlignedSequence} is a {@link Compound} of type C
  @param aligners list of alignments to run
  @return list of {@link ProfilePair} results from running alignments