Something seems funny about this error passing.  If `failFast` and `err` are both truthy, then we already hit the first if block and returned.  So it seems like once we reach here, the expression `options.failFast ? err : null` is basically guaranteed to evaluate to null/falsy.

This also seems to guarantee that, when `failFast` is false, any errors passed back from the recursive visit() call are ignored.  Is that the intent?  (If so, I'd suggest we rename the option to something like `ignoreErrors` to make it clear the topmost visit() basically _never_ "fails."  Although if that's the intent, then there's a bug where an error reading the root Directory of the traversal could still pass the client a non-null err value, due to the `callback(err)` line above).