Allow `async.apply()` be called with `this` and name of function property

* When neither `fn`, nor `fn.apply` is a function, `fn` is used as this
  for `apply()`. In this case the second argument is a property name in
  `fn` specifying the method to be called
* This does not break existing users of the API, unless they are relying on `async.apply()` to fail for non  function arguments. Keeps working for people who passed objects as `fn` containing an `apply()` property to `async.apply()`
* Documentation change would follow