Prefer an object over a hash, whenever the keys are significant

In general, any time you're working with a hash that has specific keys
(e.g. accessed with a literal), you've likely got an object wanting to
get out, even if it's just a struct with no other methods. The biggest
upside is more meaningful errors if you have a typo, since the default
behavior of a hash is to return nil. Cases where you don't care about
specific keys (e.g. using a hash to memoize a single argument method)
are fine.
I think there's value in calling out this type of primitive obsession, though, since it's likely up there as being as widely used as nil + conditionals and in my experience has caused a good number of bugs that an object and seeing a `NoMethodError` would've caught.