Support unicode combining characters

http://en.wikipedia.org/wiki/Combining_character

Closes #3945 
I profiled using `String::substr` vs. `String::[]` and array access was faster so I left it in for the single char case instead of doing `token.value.substr(valueIndex, 1)`