Make core object ids readonly

- Data object keys need to be immutable after construction in order to
preserve the integrity of KeyedCollection