blockservice: dont write blocks twice

If the datastore has a value for the key, we already have
the block. We should not write it again. This will make redundant
writes much faster.

At the moment, a datastore.Has on leveldb is a GetBackedHas.
Track https://github.com/jbenet/go-datastore/issues/6
blockservice: signal add optimization
test splitting is deterministic. (it is)
util: remove broken rand
util: cleaner ByteChanReader.Read
better test exercises saved buf
Merge pull request #237 from jbenet/dont-write-twice

blockservice: dont write blocks twice
perf(core/datastore) disable snappy compression