distinguish nil, <undefined>, and <out-of-bound>

discovered by @trantorliu
inspect keys and use / as separator to distinguish strings and symbols
here's a test for hashes with string keys and symbol keys