Bitswap rounds

This PR implements the first revision of 'Bitswap Rounds' as defined by @jbenet in issue #417 
Because tasks are returned from the map as they are encountered in GetNext, if we removed the map entry here, but not the value in the array, you could call add again and end up with the same key appearing twice.