`upto` behaves differently from `succ`  when both self and max are single letter. 
 `"9".succ => "10"` and `"9".upto("11") => ["9", "10", "11"]` but `"9".upto("A").to_a => ["9", ":", ";", "<", "=", ">", "?", "@", "A"]` . 
The only 3 cases we need to take care here not covered by `succ` are `9`, `Z` and `z`. (Just noticed the last two case not covered by the rubyspecs. Adding a fix in a moment)
You can test this with
`ruby -e 'a=[]; " ".upto("~"){|i| a<<i}; p a; p a.size '`