Merge 103c80072372b36b81d89b0709c1e697fda671ea into ea83336f4eceecbc046e465509b792dd203327bc
Merge 3427517d507a938074a50fa8ea6dfe3d13bef357 into ea83336f4eceecbc046e465509b792dd203327bc
Merge c7f039b674b43b741f20bf7521eb8a68426f4275 into ea83336f4eceecbc046e465509b792dd203327bc
Merge remote-tracking branch 'upstream-pull/2409/merge' into netstuff
Merge remote-tracking branch 'upstream-pull/2418/merge' into netstuff
Merge remote-tracking branch 'upstream-pull/2420/merge' into netstuff
Merge remote-tracking branch 'upstream-pull/2422/merge' into netstuff
Revert "Actually use mapAlreadyAskedFor."

This reverts commit 643160f6e7e5e8ca84bc7d2c1a0f37d9cf43a6e1.

Turns out this commit was useless after a more careful reading of
CNode::AskFor
Add a limitedmap class similar to mruset
Move mapAlreadyAskedFor to limitedmap

This will result in re-requesting invs if we are under heavy inv
load, however as long as we get no more than 16,000 invs in two
minutes, this should have no effect on runtime behavior.