datastore: support deferred results. fixes #77.

I thought I'd take a stab at #77. If a response from a `dataset.get` comes back with deferred keys, this will recursively call .get again, only executing the callback passed to the initial .get once, after having gathered all possible results.
Do you mean the behavior would be:

1. user runs a query
2. the api call returns deferred keys
3. we execute the callback to the original query with an error

? For Step 3, we could instead pass back a `nextQuery` query object with the keys that were deferred?