Check callback is a functionbefore calling

If someone calls `logger.info('message', foo, bar, baz);` or whatever that doesn't match `log('string', obj, cb)` it tries to call cb against the 3rd parameter regardless of if it's a function.

We could consider doing stronger validation on the call site. I'd like to find some way to avoid cascading logging errors.