Enhancements for portability by using boost

1. Used iterators
2. Used boost library to guarantee integer width
3. Made a call to boost::algorithm::tolower to guarantee lowercase so the math would work
4. Since 1.1 seems to expect it (although that's debatable), I provided a fourth algorithm that uses std::set

Note that if you submit a string that includes a case-transformed version of a prior character -- example, "AbCdEfGa", the third routine will return "not unique" while the others will return "unique". That should be acceptable in the code interview if you say so, since 1.1 doesn't specify.