
Object::id is a unique identifier for any object, regardless of its type, structure or contents. its features are:
* works on any object of any type
* does not modify the object in any way
* does not change with the object's contents
* is o(1) to calculate (ie. doesn't matter how big the object is)
* the id is unique for the life of the process
* the id is always a true value