use self.class instead of constant name to allow inheritance

Currently, if you subclass `RecursiveOpenStruct`, any nested hashes get created as `RecursiveOpenStruct` objects instead of the subclass.

To fix this, I changed all instances of the `RecursiveOpenStruct` constant to `self.class`.