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.
I think the behaviour should be similar to what you've explained above. We should return an error object with deferred keys, but should return the successfully retrieved objects as well.

Including deferred keys in nextQuery would break the pagination, so I think we should stay away from that option.

Does this sound good?