gofmt
fix absolute file path handling on non-Unix systems

Checking whether the first byte is a path separator won't work on e.g.
Windows.

As a side-effect, this change generally cleans up handling of absolute
file paths.
improve error handling by exitting with non-zero exit codes
print errors to stderr, not stdout
return early if we couldn't read directory entries
always have a final newline in error output
promote scanDir to a named function