Allow DynamicObject instances to be in multiple CompositeDynamicObjectCollection instances

Rather than storing a property on the objects themselves, generate a unique key based on the object id, the id of the collection it is in, and the property name.0

Add an `id` property to both DynamicObjectCollection and CompositeDynamicObjectCollection; which is a readonly GUID generated at construction time.