extra/runner/report.py - use SQLite cache of file contents to speed up

On file systems where both stat'ing files and getting their contents are
very slow (two or three orders of magnitude slower) this commit improves
performance by five-fold by using an SQLite cache and other changes.

Testing on a representative directory with 4721 result subdirectories,
each subdirectory with ~10 files:

```
without cache: 102 seconds
with file cache, 1st-time report, 318 seconds
with file cache, 2nd-time report, 55 seconds

with file cache, only stat .manual for failure-reason and notes: 40s
with file cache, better get_images and get_files: 31 seconds
with file cache, don't assume OS caches file stat results: 21 seconds
```

You should never have the large "1-st time report" penalty because you
should be incrementally building the report. You need to create some
other background job that continuously and incrementally builds reports
because if you don't then you will be forced to rebuild a large number
of directories which are uncached.