sort HAproxy IPs into IPv4 and IPv6 lists

b/c we can't match v4 and v6 addresses
connection: fix typo
refactor: merged duplicated code into mxErr,

moved implicit_mx to it's own function
mf.rslv: add test cover to new functions
add config callback, to compile re_bogus_ip after

file change
Merge pull request #775 from msimerson/haproxy-ipv6

sort HAproxy IPs into IPv4 and IPv6 lists
Merge pull request #774 from msimerson/mfr

mf.resolvable: add some test coverage
line_socket: rename socket to 'socket' (was: self)
smtp_client: moved STATE_* vars into STATE object

and renamed self -> client (meaningful)
smtp_client: handle timeouts in a more robust way

set a default if whatever val arrives doesn't parseInt()

smtp_client.get_client_plugin

pass it a config object, rather than a config file(ish) object. IOW, have
smtp_client and smtp_proxy pass in the 'main' section of their config file
instead of their entire config.
when rcpt_to.length===1 and more specific smtp

route is defined in smtp_forward.ini, forward the message to the more specific
smtp route.
when a smtp connection has multiple recipients and

they all are destined to the same forward host, use the more specific
smtp_forward host.
smtp_forward.md: reference issue #573
smtp_forward: add additional check for domain

smtp_proxy: update for config changes in _client