Patch 2/2 -- buckets

Patch to address the keyspace neighbor excess. Which is a good problem to have, but still a problem.

Adjusts the getWorstNode function. In addition to protecting nodes that are someone's best parent, we also protect nodes that are important to keyspace. This is done in (more or less) the kademlia k-bucket style, with k = 8 as the current default.

That is, we iterate over keyspace starting at the most significant bit. For the nth bit, we find the best k nodes which match exactly the leading n bits of our address. We mark these nodes to protect them, as if they were someone's best parent.

Then, instead of judging worst nodes by keyspace distance, we judge them by reach (and use keyspace distance as a tie breaker).

In the event that this causes every node in the store to be marked, we ignore marked status and just evict the worst node. Because the reach of a child node is by definition lower than the reach of its parents, this means that a child node will be evicted. If all nodes are marked, this implies that a node which was protected for keyspace reasons was evicted. So in theory it could open a routing blackhole. It does not appear that this is a problem for the current network and NodeStore sizes.

A better solution, in the long term, would be to find the worst node which is not needed for keyspace reasons (but may be someone's best parent), and call a hypothetical forgetNode() function on them. This would need to splice links to its children with links to its parent, to keep its children accessible, before removing the node and its old links from the NodeStore.