Initial review

The most recent commit message is so accurate.

Catching the ValueError will be slightly faster than count-then-split in the good case, e.g.
```
try:
    add_sub, chunk_num, hash_len, read_len = header.split(":")
except ValueError:
    raise ParseError("Incorrect number of colons in chunk header")
```
You may find it a lot uglier though, so no big deal.