Switch from using puffs(3) to raw puffs(4). This is because puffs(3) is obnoxious for our purposes. It's fine if you just want a simple filesystem. But if you want any other fds in its event loop, those fds have to communicate using puffs_framebuf. I could just hack on the source to the main loop, but it uses kqueue/kevent. I could probably figure that out too, but that's getting to the point where I'd rather learn the underlying mechanism and use an event loop I'm actually comfortable with. This is all in aid of adding a diff directory, because that can take long enough to compute the output that we don't want the whole filesystem to lock up during it. But making it async enough to serve other requests while one request is pending runs into the above issues.