Pass key to iterator if async.each() iterator takes 3 arguments

I have implemented a way to optionally pass a key/index argument to the async.each iterator.

```
async.each([1,2,3], function (val, index, callback) {});
async.each({a: 1, b: 2, c: 3}, function (val, key, callback) {});
```

It is backwards compatible since it omits the key/index argument for iterator functions that accept less than 3 arguments.

All tests pass.

See issue #72.