Fix add() to respect options.id

Use *options.id* with priority if given, just like *add()*'s own documentation and *put()*.

This also fixes the existance check by preventing *put()* from storing an object with different id via *options.id*.
If there's no testcase for this already, one should be added.

If both *options.id* and *object[this.idProperty]* are undefined, the existance check will probe for an item with undefined id. If this is not intended, an id should be generated as in *put()* itself (preferably moving the code into a helper method as well).