Major refactoring, API change

- Refactoring `array.each()` to support asynchronous iteration with 2 new optional arguments
- Refactoring `data.batch()` to use an async `array.each()` with a batch size of 100
- Updating docs