I don't think these methods should be public: "has_removed_properties?", "has_new_properties?", "delete_removed_properties". They should be kept private.

Also, I think we should be adding *some* of the methods of the Hash class, only the ones that make sense. If the custom data is not materialized, we should do it when one of those methods is called (lazy loading).