net_utils: move is_ipv4_literal into net_utils
Merge pull request #535 from msimerson/net_utils

net_utils: move is_ipv4_literal into net_utils
net_utils: added get_public_ip, using 'stun' package
qmd: when relaying, validate MAIL FROM against QMD

and refactored the code a little, to avoid redundancy
qmd: added config:check_outbound option
qmd: move the callback to the last argument

to get_qmd_response
Merge pull request #534 from msimerson/qmd

qmd: when relaying, validate MAIL FROM against QMD
Merge pull request #536 from msimerson/net_utils

net_utils: added get_public_ip, using 'stun' package
watch: imported to new branch
watch/server: wrap loading of connect and ws in try

and log error if they can't be loaded
watch: only load hooks when ws & connect load successfully
watch: moved port & ssl settings into watch.ini
watch: TLS off until explicitely enabled
watch: client now learns wss URL from the server
watch: removed server:name_map (send full plugin name to client)

JS client strips off phase prefix and otherwise shortens plugin names for presentation
client makes DOM element names CSS compatible
watch: get default WSS host from config/me
watch: add CSS for menu, QUEUE red for rejects, with msg
watch: check fcrdns before length
watch: only send plugin result when data exist

previously, an empty object was sent. Now that the watch client dynamically redraws the form to show new plugins, this avoids reporting empty data for plugins that are not active.
watch: call get_remote_host during deny() hook

so it shows up in connections that are rejected at hook_connect