Changed `store#pushMany` to be asynchronous and look for `DS.yieldFn`

This is a backwards incompatible change that changes `pushMany` to
return a promise that resolves with an array of added records. This
allows the potentially very expensive operation of pushing a large
number of records into the store to yield between individual pushes. It
looks for the function `DS.yieldFn` and invokes it between pushes if it
exists, passing a callback, an index, and a done flag:

    DS.yieldFn = function(next, index, done) {
      // yield to other tasks
      next();
    };

The practical implication is that `requestAnimationFrame` can be called
while the store is working to prevent blocking animations.