Only optimize keys for hashes

We want to use frozen keys to avoid holding separate instances of the
same string keys for every record, but this shouldn't prevent us from
accepting other inputs that are hash-like. Hashes are the common case
so let's continue optimizing for that, but allow everything else to just
pass through. Hopefully the Reader itself can freeze keys and gain this
optimization automatically, as with my [CSV patch][1] in ruby 2.1+

[1]: https://bugs.ruby-lang.org/issues/9143