Optimize isFunction only when appropriate.

Closes #1929.

@jdalton: How did you test this? Seems PhantomJS doesn't play nicely with `typeof` or `toString.call` (returning `object` and `[object Int8ArrayConstructor]`).
Again it shouldn't be necessary to be doing that each anyway, `.every(_.isFunction)` should suffice otherwise we have other issues