Implement Rename
Remove child parent references
Handle reads at the end of the file correctly.

- This fixes a regresion from the move from fuse.fs.Serve to fuse.Conn.
- It would be a bit simpler to not return EOF and then special-case it all the
  way up the stack, but it seems more correct to indicate EOF when it's
  reached.
- Also, minor gofmt clean up.
Only pass ReadDir() response through HandleRead()

HandleRead() butchers the response from Read(), which is already taking
into account the offset and size parameters of the request.
Allocate resp.Data before calling HandleRead
Migrate all non-trivial responses out of serve()

The case statements in serve() were really unwieldy.  This migrates most
of the non-trivial case statements out into separate functions of the
same name.  Subsequent changes will handle Read and cleaning up the
casing of the function names.
Clean up the casing of methods of serveConn

- There's no need for these methods to be exported, so I've made them
  all consistent, and lower case.  The Read() methods will be tackled in
  a separate change.
Clean up the read and readDir methods

- Move the complexity out of the case statement
- Branch sooner, which duplicates a couple lines, but makes the code
  much clearer over all.
- Homogenize capitlization to lower case
Ensure everywhere we RespondError, we also return

In particular, in the recently-separated code paths, it's important to
not accidentally continue past a RespondError and stumble into
dereferencing a nil pointer.
Add a version to the Checkpoint, and db.reinit()

The Version field of the checkpoint allows a check for an increase.  If
found at setup time, throw away all of the previous Metadata entries
from Google Drive, and reset the Changes counter to resync.

This paves the way for changing what's stored in leveldb that won't
result in insanity across versions.
gofmt
First steps towards making inode 1 less special

Kudos to Jon Allie for the excellent suggestion!

Goal: Store inode 1 in leveldb, do a lot less special-casing of it, as
you can simply look it up.
Caveat: Some will remain, when interacting with the Drive API, but the
fuse layer, especially reads, should get a lot cleaner.

- synthesize the rootId and write it to levelDB
- special-case handling of the root's Id at inode allocation time
- remove rootId from fuse_fs.serveConn, which isn't using it
- add drive_db.DriveDB.rootId
- add locking during reinit()... seems unlikely to be necessary, but
  it's the safe thing to do.
- actually check the reverse mapping of inodeToFileId
- allocate clearFromCache more efficiently, fixing a bug along the way
- const driveFolderMimeType and copy to drive_db.go
Finish ripping out special casing of root inode

Kudos to Jon Allie for the excellent suggestion!
See previous change for goals/caveats.

- Add a bit more color to the root inode in createRoot
- Stop tracking RootInode entries in levelDB
  - rip out all the code that creates them
  - rip out all the code that queries them
- dramatically simplify getattr(), lookup() and readDir()
- drop some unnecessary special-casing and debugging from mkdir
Merge branch 'master' of https://github.com/asjoyner/fuse_gdrive
Merge branch 'master' of github.com:devilmonastery/fuse_gdrive