Avoid WriteAll in test that is not about WriteAll
Avoid WriteAll in test that is not about WriteAll (output message only)
Avoid WriteAll in test that is not about WriteAll (name only)
Remove WriteAll

It never worked in all cases, and required special casing in the core
logic. It will probably come back as a helper Handle type, with a
different API, later.
Simplify saveHandle

Remove return value used only by WriteAll.
Manage NodeID reference count, only call Forget when dropping last reference
Add NodeRef, allowing Nodes be recognized across calls

Without this, a simple looping write+read workload of ~10MB sees about
1.3x times the Lookups and 5x Forgets, as the nodes are not recognized
between multiple Create/Lookup calls.

Unfortunately, this is not easy to test in isolation; triggering the
bad behaviour seems to require an EntryValid timeout (or something
like that; something causes the kernel to decide to validate the
cache) and a second Lookup that creates a new NodeID. This has so far
not been easily reproducible in a timely fashion.
Move attribute and dentry default valid time into const
Do not debug log all the read data, that's just too much
Remove, not just zero, handled requests from the map used for interrupting

Previously, if the kernel did not quickly reuse RequestIDs (which
Linux does not), the map would grow to 2**64 entries.
Make sure to call done() even when HandleID is not known

This may have been the source of what seemed like RequestID reuse,
with OSXFUSE. Add TODO note to test that later.
Allow applications to do structured logging

From now on, every message logged has a distinct Go type, and knows
how to marshal itself to JSON in a form that is suitable for automatic
processing.

Traditional textual logs can still be achieved by simply stringifying
the message. Common log messages have eyeball-friendly string
representations.

Formats other than JSON may be considered later.
Structured logging simplification

Header is pulled out explicitly, so hide it in each Request.

Hide Conn in Header.
Reimplement the "<-", "->" style textual log format
JSON logging: log just length of read/write, not data
Structured logging: marshal Errno as text like "ESTALE"

The numbers are both not portable and not readable. The full textual
error message is not as directly skimmable, and might not be easily
reversible back to the error (e.g. the error strings differ between
glibc and Go). This is a good middle ground.
Use structured logging for Node refcount debug message
Convert last uses of fuse.Debugf to fuse.Debug
Structured logging for Link invalid old node id
Structured logging for short write to FUSE fd