datastore: expose ID, path, & namespace. fixes #171.

Thought we could use Object.defineProperties here to avoid getter methods. This instead allows us to read the properties from the key object, while preventing the user from overwriting them.