Modified the alignment implementation to handle IUPAC ambiguity codes
The alignment algorithm now understands how to align sequences which contain IUPAC ambiguity codes. All tests pass using both the optimized algorithm and the un-optimized algorithm.