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.
> Any reason why you can't do the followup calls iteratively instead of recursively? Is it just javascript style issues?

Yes. Also worth pointing out, should any api call return an error, this change will still bubble it back up to the original caller of `get`.

Thanks for the insight, @stevenjklein and @pcostell.

Sounds to me like we want to keep the behavior of this PR, @rakyll? Unless you have other ideas for a better implementation, I'll be happy to rebase this to get it ready for a merge.