Move reader IO to a separate thread.

Before, when we did all IO in the main thread, we could block for a long time downloading N blocks from a server, before we would return even the first one to user code. This ensures that IO can happen in parallel with user CPU access in general.
several changes

- rename 'fsck' to 'validate'
- add some docstrings
- make double-close work
- add ZSS.__del__ method
improve gbooks2 metadata
Remove reference loop which was messing up __del__
remove some code that was incorrectly working around a non-problem
fix buffer overflow bug (doh!)
format change: used u64 everywhere, and store total file length
add explicit tests for transports
automate letters.zss generation
fix test broken a few commits ago, but missed b/c I forgot to rebuild _zss.so
format change: switch to 64 bit crc
format change: switch to storing sha256 of data instead of uuids