add FileReader.Checksum and 'hdfs checksum'

The FileReader.Checksum method provides access to HDFS's built in checksum
ability, which works by checksumming concatenated checksums which are already
stored alongside the data.

This also adds a datanodeFailover type, to abstract over handling datanode
failure in multiple contexts (reading the checksum is the second such context;
reading blocks was the original one, and writing blocks will eventually be
similar).