Added implementation of modified Smith-Waterman Algorithm

There is a lot of repeated boilerplate in these methods; consider abstracting some to save yourself from having to change each function with each test change.