optimize usage of fn.apply

Optimize the usage of fn.apply, by using fn.call whenever possible results in at least 100% performance increase over just using fn.apply.

The benchmark is here:
http://jsperf.com/callorapply-vs-apply

The performance increase is twice as fast on Chrome. And ridiculously faster on Firefox (looks like 700% increase).

It is just microseconds after all. But shaving microseconds off a latency sensitive operations matters. And the savings adds up over time. Also considering async's job relies heavily on calling functions it should see real benefits.

It doesn't add any real bulk or complexity to existing code, the only downside is, it adds a few bytes (browser only).

Doesn't break current tests, all tests passing without modification.