Modify the findOptimalAlignment function to return the aligned strings as well as the optimal score.
Cache previously seen strand combinations to prevent unnecessary recursive calls.  Add a unit test suite.  Printing function for the raw and aligned strands.