Rework datastore API to use a single callback

It should simpler to understand and to use.
Add datastore.setMetadata