Use queue-based directory parsing instead of recursion.

In a directory with 515 files, `SmbFile#listFiles()` was returning 52000+ files with each file duplicated hundreds of times. This keeps track of seen files as well as using a queue to avoid polluting the stack with recursion.