open(), fstat() files before writing headers

Case 120581: open() and fstat() files before writing headers, to ensure  size
indicated is the same as size of file archived; the following technique is
used to achieve this:

    1. open() each inode with O_NOFOLLOW, indiscriminately.  If open()
       returns -1 and sets errno to ELOOP, then use lstat() to obtain
       symlink inode information.

    2. If open() succeeds, use fstat() subsequently, keeping the fd open
       for the duration of the file archival.

Other changes:

    * Fix a bug in b_find() wherein some error recovery code tried to
      destroy the same object twice, potentially
Merge branch 'case120581' of git://deathstar.dev.cpanel.net/~erin/archive-tar-builder/erins-archive-tar-builder