Added PutBlock and PutBlockHandler (refs #2292)
PutBlock creates dirs as necessary when storing new blocks (refs #2292, refs #2449)

PutBlock calls os.MkdirAll() to create the directory hierarchy when
storing new blocks.

Also: better error reporting and logging.
Typo fix.
Added TestPutBlockOK. (refs #2292, refs #2449)

Also:
* Fixed some sloppy/confusing error handling.
* Removed dependency on "path" in keep.go.
Added TestPutBlockOneVol and TestPutBlockCorrupt. (refs #2292, refs #2449)
Doc fixes.
PutBlock saves a block on only the first available volume (refs #2292)

Per code review: Keep stores a block on only one disk at a time.
Updated PutBlock, and PutBlock/GetBlock unit tests, appropriately.
Merge branch 'master' into 2449-keep-write-blocks
Added IsFull() to check for free space before writing. (refs #2292)
Merge branch 'master' into 2449-keep-write-blocks
Check for MD5 collisions and corrupt blocks. (refs #2292)
Merge branch 'master' into 2449-keep-write-blocks
Update for code review (refs #2292).

* Use ioutil.TempFile to write new blocks, renaming to the correct
  name upon success.

* PutBlock should overwrite corrupt blocks, not report a collision.

* Get free disk space from syscall.Statfs, not `df`.
Merge branch 'master' into 2449-keep-write-blocks
Added TestPutBlockCollision (refs #2292).
Merge branch 'master' into 2449-keep-write-blocks
Added todo for TestPutBlockWriteErr (refs #2292)
Merge branch 'master' into 2449-keep-write-blocks