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.
If there is an actual problem on the backend it will just return with an error. It only sends deferred keys if the responses are too large to fit in a response. Both the java and python SDKs will loop until all the entities are collected. @stevenjklein can comment on the more specifics of deferred keys.