Save/load crash with non-primitive dict keys — _serialize_value() now handles dicts where keys are custom objects (e.g., Card objects used as dict keys in game state). Non-primitive keys are serialized via _serialize_value(), JSON-encoded into __objkey__:-prefixed strings for JSON compatibility, and fully reconstructed on load via _deserialize_value(). Previously, saving a game state containing such dicts would raise TypeError: keys must be str, int, float, bool or None.