Refactor the code

At some places in the code a char variable is more meaningful than a
string. Add const and auto keyword wherever you can. Use ASSERT_EQ when
you do not use the Eq() function. Explicitly handle the case when a
character is uncodable.
Add feature "ASoundexEncoder.IgnoresSubsequentLettersWithTheSameNumber"
Add feature "ASoundexEncoder.CodesSameCodedLettersSeparatedByVowelsTwice"
Add feature "ASoundexEncoder.CodesSameCodedLettersSeparatedByHOrWOnce"
Refactor the code

The words number and digit have different meaning. Use the digit word.
Minimize the usage of tolower() function.