Merge pull request #540 from msimerson/syslog

syslog: only run tests if able to load node-syslog
Merge pull request #539 from msimerson/qmd

qmd: bug fix, for incorrectly specified variable
Merge pull request #537 from msimerson/geoip

geoip: use net_utils.get_public_ip
config/plugins: populate it
geoip: enable distance & too_far
headers: disable reject
config/*: mass adjustments
weirdly related enhancements

* move is_ipv4_literal from plugins/helo.checks to net_utils
	so it's available for the SPF plugin

* SPF: skip HELO tests for IP literals

* SPF: when a connection has relaying permissions, use our (Haraka's) public IP in the SPF mail_from query, to determine if Haraka has permisison to send on behalf of that MAIL FROM domain.

* move the public_ip setting out of config/connect.geoip.ini to config/smtp.ini, used by GeoIP and SPF plugins.

* updated connect.geoip to use boolean config options
spf: SPF results were invalid if TXT record exceeded 25? bytes.

this appends additional TXT strings to the record (completing it)
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.