Coming from #27652. Implementing the first part of it.
The idea is to let users call getblockfrompeer without providing any peer id.
The node will internally select one peer at random and make the getdata request.
This also fixes a bug where the user is allowed to call getblockfrompeer providing
an id of a peer that signals a “limited” service. As limited peers cannot provide historical
blocks, it is not correct to allow the user to do that.