This implements a basic peer discovery mechanism that works only between active avalanche nodes with valid proofs.
A node sends an avahello message if it has a proof and the other peer signals the avalanche flag. Each peer then requests the other peer's proof with a `GETDATA` message using the proof id that is in the delegation included in the avahello message. The avahello signature is stored when the avahello message is received and checked after the proof is received. If everything checks out, each node add the peer as a new avalanche peer.
A configuration option is added to disable this new behavior by default.