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
return nil, err?