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.
This is how I'm envisioning what we're discussing so far, let me know if you see it differently:

```js
ds.get(ds.key('Company'), function(err, entities, nextQuery) {
  if (err) {
    if (err.deferred) {
      // handle err.deferred
      entities = err.entities;
    } else {
      // handle error
      return;
    }    
  }

  if (nextQuery) {
    // handle nextQuery
  }

  // Do something with `entities`.
});
```

My concern is this new "gotcha", plus the handling of `nextQuery` that has to be done could lead to a lot of boilerplate and confusion for each query the user needs to run.

I think we would be breaking patterns if we returned an error object that held success data as well or populated the "success" `entities` callback argument alongside a populated error argument. I think for clarity we should pick one way or the other -- is it an error or a success?

To go back to how this PR was done originally, is there any chance receiving a populated `deferred` array is uncommon enough the recursion wouldn't likely go beyond 1 extra call deep?