Return bytes added to buffer.
Optimize dirent size and batch copy out.

On Linux, the kernel dirent structure looks like:

struct {
    uint64_t d_ino; /* uint32_t for getdents on i386 */
    uint64_t d_off; /* uint32_t for getdents on i386 */
    uint16_t d_reclen;
    char d_name[]; /* variable size */
    char padding[]; /* to ensure 8-byte alignment */
    uint8_t d_type; /* useful on supported file systems... */
};

The structure must be 8-byte aligned. [For i386, it may be 32-bit aligned but
expanding the padding to 64-bit alignment is harmless and keeps things
consistent.]

Because of d_type being at the end, it's not very useful to define these fields
in a structure (since the structure size changes depending on d_name). So
pfs_dispatch*.cc now just explicitly writes out the fields into a buffer.

All of the dirents are batched into one large write for the copy out. This is a
performance optimization (as is this whole commit).

Lastly, the maximum size of the getdents buffer is 64K. glibc only ever uses
32K so this seems like a safe limit.