Ipns name resolution

This branch is not yet complete, but before i move forward, the name resolution code (in namesys) needs some critiquing. There are also a decent number of bugfixes in this branch that i ran into while trying to get the code to a point where i could test ipns.
Hi. Thanks for the love, send some toward rsc too.

The FUSE Read method doesn't match Read semantics. It looks a little bit more like ReadAt, but even there the semantics are not an exact match (e.g. fuse ReadResponse is not required to provide exactly the requested amount of bytes on success).

Write is a similar story, it looks a lot like WriteAt, but then there's extra WriteFlags.

All of the four relevant messages -- ReadRequest / ReadResponse, WriteRequest / WriteResponse -- may be extended with extra fields in future versions of the FUSE protocol.

I really recommend you view FUSE as a specific, very low-level, API, and don't try to force generic semantics on it. The interface is dictated by the needs to POSIX and the VFS, and in general is "wider" than many APIs aimed at convenience and universality, such as io.Reader / io.Writer.