Stop relying on Hashie

TODO: add tests :-(

Questions:
- Is the `required` option really necessary? Of the failing tests, none
of them seem to be related to that.
- Just how necessary is having a hash with indifferent access? I
noticed that if I change the hash keys to all be strings, most of the
existing tests passed. In the Ruby world it’s better to use symbols for
this sort of data, so is it okay to update the tests to reference the
attributes as symbols?