Adjust reverse maps on object initialization
Fix unique tests
Forgiving reverse maps managment.

There are corner cases where add rev refernce for given object might be
called twice, or delete called for object not added. It may happen when
e.g. object has prototype changed and both type and multiple settings
for given property changed. For example: switch from { multiple: false,
type: ok } to { multiple: true, type: not-ok }, produces false negative
for multiple item and invokes deletion of reference (happened on Lomas
system). Reason is that `type` propagation assumed { multiple: true }
was there, and item was valid and turned invalid.