On OS X only, use libc unmount directly

On OS X, fuse_unmount_compat22 calls realpath, which calls back into the
file system.  If an error is returned from this operation, it then
proceeds to silently do nothing.  This can cause a background filesystem
to stay mounted and hang rather than unmounting when a BackgroundSession
is destroyed.

So instead, we get the realpath at mount time, and then at unmount just
call unmount directly.

This only applies to OS X.  On other platforms, fuse_unmount_compat22 is
more complex, and still needs to be used.

Fixes #7.
Replies take self by value
Refactor reply send method to be type-independent
Replace duplicate reply warning with a simple assertion since `ok` and `reply` can only be called once now
Fix warning of unused variable in non-OSX builds
Merge pull request #15 from MicahChalmer/os-x-unmount-fix

On OS X only, use libc unmount directly
Spacing
Pass a mutable slice to the channel for receiving data
Use a heap slice for the request buffer instead of a dynamic vector
Request more features in init flags. When initializing, only request flags reported as capable
Move MAX_WRITE_SIZE to session. Explain session loop
Move error code negation to send method to prevent confusion
Don't use dynamically sized vectors where slices are sufficient