fill in functionality for Client#Mkdir and Client#MkdirAll
implement Client#Remove, Client#Rename

there's some weirdness around sequential deletes, but will poke at that later
make sure we return ErrExist if calling Mkdir on an existing directory
reorganize everything into smaller files
add CreateEmptyFile

(which will eventually be subsumed by a FileWriter type, no doubt)
restructure tests to use the library itself for fixtures
copy defaults into requests (so they don't get duplicated)
always increase requestId, rather than wrapping around
lock namenode while writing the handshake
clean up copy pasta documentation on FileReader
remove a stray log
checksum block data
improve exception handling by switching on the exception class name
return os.ErrNotExist correctly when calling ReadDir
remove references to allowWriting
add a test for reading an empty file
fill in a ton of permissions functionality and tests