fix logic, finally.
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
watch: added docs about wss_host usage
watch: get_generic_results now merges conn & txn results
watch: updated for new 'relay' plugin
watch: on hook_deny, pass along params to helo,mail,rcpt collectors

so rejected args get shown in watch output
watch: test if mail(.., params) is set before accessing it
watch: added sampling feature
watch: removed web server feature

that's being handled by server.js