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.
On second thought I am just wondering the effeciency of always assigning a list of hosts even if an error occurs to the pool. If an error occurs I think it would be easier to not to call pool.SetHosts and log the error received from GetHosts instead of maintaining the previous state of the HostList. That way the Pool doesn't have to compare the list that really is identical to what it has. This also cleans up the GetHost as you can just return the error as part of the GetHost function and have 1 log.Printf statement.