Use os.MkdirAll instead of os.Mkdir.
Use OpenFile with O_CREATE|O_EXCL instead of Create.

This is important for two reasons:

1. Basic synchronization; when we parallelize this we don't want two
   goroutines operating on the same file.
2. Checking the error acts as a way to check if the file already exists;
   create will succeed even if the file already exists.
Check the error from os.Link.
Got rid of some debugging print statements.
Several related changes:

* Abstract the `if err != nil ...` pattern into it's own function
  (checkFatal).
* Check for errors from io.Copy
* Fix a bug caught by the io.Copy checks: Needed to pass os.O_RDWR to
  os.OpenFile.