Major refactoring

- Updating `array.each()` to not set an unneeded variable while iterating
- Updating `array.limit()` to halt iteration at the end of the Array
- Updating `client.jsonp()` & `client.request()` to return a `Promise`
- Shortening call stack for some `string.trim()` executions
- Refactoring `data.batch()` to be aware of `data.leafs[]`
- Updated `data.generate()` to use the appropriate record key (instead of concatenating the parent.id)
- Data stores to have new `data.max` & `data.maxDepth` properties
- Updated the following methods to return a `Promise`: `data.batch()`, `data.crawl()`, `data.del()`, `data.generate()`, `data.set()`, `data.setUri()` & `data.sync()`
- Removing `future` parameter from `data.batch()`, `data.crawl()`, `data.del()`, `data.generate()`, `data.set()`, `data.setUri()`& `data.sync()`; this is an API revision / regression from 3.3.x syntax
- Updated `data.generate()` to accept a String retrieve or Array to batch records
- Fixed `promise.resolve()` & `promise.reject()` to reconcile on the next tick
- Updated `promise` unit tests
- Implementing `data.depth` & `data.maxDepth` to control recursive API consumption