source_ip for Client and UDPClient and source IP resolution -- Client improvements based on dowski's PR

Based on reject pull request of dowski ( https://github.com/jamwt/diesel/pull/65/files )

(basically refactoring of dowski's PR)

Determination of IP/name is now done inside resolver.py as requested by jamwt
    
source_ip specification is now possible for Client as well as UDPClient. 
Having it inside UDPClient was a necessity as _setup_socket in UDPClient is called using code from Client's __init__