DDF-665 Improved performance of dump and ingest commands

- Dump uses multiple threads to write files to the filesystem
- Dump can create multiple directory levels to avoid writing too many 
  files to a single directory
- Ingest walks all subdirectories to find files to ingest
- Total ingest file count is calculated in a thread to avoid blocking
  the start of ingest
- Run time for ingest and dump is printed as days, hours, minutes, 
  and seconds
- Ingest and dump write a completion message with details to the log
  file
- Added native query mode to avoid caching all dump results
- Tests now use a temporary folder