generalization of aligner functions to support aligning alignments

The global aligners can now align pairs of sequences, pairs of alignments, or a sequence and an alignment. This is useful in progressive multiple sequence alignment.

Fixes #550.
If sticking with this form instead of `product`, then it is possible to pull out one of the lookups and do it in the unnested loop. Potentially makes the error handling more interesting