host_list: huge performance increase, esp for many hosts

Before I defecate on the implementation of rcpt_to.in_host_list, allow me to first point out the one area where it excels:

loaded 90822 hosts
loading config took 0.066 seconds (array)
loading config took 0.087 seconds (array+toLowerCase())
loading config took 0.152 seconds (object+toLowerCase())

That's right, the existing implementation is fastest as loading the config file to an array. But it's all downhill from there. In the next test, we look up a hostname in the list, 90,822 times (to average the lookup time):

searching config took 1662.722 seconds (array)
searching config took   87.560 seconds (array (lc during load))
searching config took    0.208 seconds (object (lc during load))
host_list: updated tests
Merge pull request #595 from msimerson/host_list

host_list: huge performance increase, esp for many hosts
helo.checks: make match_re work

1. precompile the regex list at load time (was: compile every regex on every connection)

2. test regexes, ignore and log error for bad ones

3. load .ini and regex list at register() with config parsing callback (was at connect())

4. added tests for match_re
valid_regexes: moved to utils
valid_regexes: moved tests from access -> utils
utils: added description of arguments to valid_regexes
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