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.
I don't think session should return successfully if the pool size is 0 at this point. That means there are no hosts available to make a connection too. Therefore trying to discover hosts will fail. I think there is a value of having the session creation fail fast instead of it trying to start with 0 connections and hoping it will be able to connect later on.