Instance index key can be an array of value which could contain nil values. To compare two
hash containing nil values (using <=>), it was necessary to dropback to a comparison of strings.
Example: ['a'] <=> [nil] would be converted to a comparison with "['a']" <=> "[nil]"
RoleValues was basically a wrapper for an array, and is now similar to an ordered
hash. The basic functionnality of RoleValues have not been modified, and it should still
be considered as an array on multiple points, but this array will be ordered by its values
Refactoring to InstanceIndexKey has been done also to be used by RoleValues. Therefore, its
name has been modified to be ComparableHashKey instead.
Adds information into related_entities. It should contain a RoleValue
object when the role is pointing to many entities (see unique attribute
It also adds a way to query entities in a two-way fashion. Which means
you can now search for entities which references the current one, but
also entities which are referenced by the current one.