Guard against a race in fuse.Conn.dev use vs close

`net.Conn` guarantees it's safe to use concurrently; `*os.File` does
not. My bad. Guard against writers with the existing `wio` lock. Add
analogous `rio` where readers can co-exist (let kernel decide who gets
next message), but closing excludes all readers.

Note that closing an `*os.File` does not wake up blocked readers, as
it would on a `net.Conn`, so the fact that fuse.Conn.Close waits for
readers to complete to get the lock does not really matter. Hangs
migrate from `ReadRequest` to `fuse.Conn.rio.Lock`. The correct way to
ensure `ReadRequest` returns is to tell the kernel to close the
device; that's done by unmounting the file system.

fixes #37