Use Chmod syscall directly

Go's os.Chmod performs translations on the file mode bits, resulting
in permissions being restored incorrectly.  Directly call
syscall.Chmod to set the permissions properly on restore.
Turn store.Visitor into an interface

Instead of a struct full of function pointers, make it an interface.
Use embedding to provide an EmptyVisitor that provides empty
implementations of all of the methods.
Initialize the path trackers

It seems that 'append' can handle nil arrays.  However, this doesn't
seem to be clearly documented, so initialize the path tracker to avoid
future portability problems.
Restore symlinks

Restore symlinks, with proper permissions and ownership.  Now also
prints a warning for the remaining node types that aren't restored.
Move test utilities to own package

Allow the temp directory tests utilities to be used by other packages.
Move pool test framework into tutil

This is useful in other packages as well
Indirect writer

Implement a utility 'IndirectWriter' that assists writing out indirect
blocks.  The client calls 'Add' for each block added, and then
'Finalize' will return the root of whatever indirect tree is needed to
represent that data.
Support older SQL schema versions

Allow older schema version to be detected, and track features that
will be missing.  This, for example, would allow old schemas to be
read, but require new tables to be able to dump to them.
Linux-specific dir reading

In its attempt to be portable, Go's os.Readdir returns the entries
unsorted, and performs a stat.  On large directories, this can result
in a lot of seeking.

Implement a Readdir, more Posix specialized that returns just the name
and inode number returned by the readdir_r() library call.  This can
then be sorted by inode number before calling Lstat on the entries,
for example.
Directory writer

Store utility for encoding directory entries.
Basic backups

Perform backups of files, file contents, all types, and directories.