mmm I don't like to have contracts with classes instead of interfaces https://github.com/liuggio/ChangeSet/blob/1e7040b05d93429a118cf4dc0a17a579d887e77c/src/ChangeSet/IdentityMap/IdentityMap.php#L15