bitswap blockservice diplomacy

> My main and my ex screaming like it's a habit
I move immune in between 'em because I'm diplomatic 
\- earl sweatshirt

1. To simplify design, bitswap is now responsible for `Put`. blockservice is too. To make this not matter, we cache Writes. Writes are cached, so duplicate `*blockstore.Put` calls are elided.

2. Additionally, blockservice uses polymorphism to differentiate between online/offline exchange

3. Put is expensive. Can't hide this cost, so we perform blocking writes to keep the system from becoming inundated with pending writes.

vendors hashicorp/golang-lru dependency. (Mozilla Public License, version 2.0)

@jbenet @whyrusleeping 
(i know its just for testing, but still cool concept)