datastore: refactor privatizing of Key values.

Born from #175 

Since we decided not to expose a `getId` or `id` property, this is simply a clean up of what we already have. Instead of pseudo-hiding the namespace and path, this allows them to be read, but not written after instantiation.