Add periodic node discovery with optional filters

Add support for periodic node discovery via system.peers.

This lays the foundation for more feature full connection pools, such as token aware host selection.
Not sure I understand the reasoning of this function. It is only being called by SimplePool.connect and therefore seems unnecessary to have this logic in a separate function. Also it looks like the error handling is redundant as well and would lead to 2 error messages for a single failed connection attempt.