Bitswap

The outer goroutine is needed because the for loop is looping over the range of a channel, the channel comes from a FindProviders call that is sending providers in on the channel as it recieves them from the dht. So if the first provider we try gives us our value, we want to be able to finish and return from the function before the rest of the providers come in off the channel.