valen: Backend version 2 with new output format and semantics

The old mechanism to define wesnoth.org facilities proved extremely
inflexible and not particularly extensible given that the various
overall facilities (DNS, http, wesnothd, campaignd) had to be handled
directly in the probing section and some of the checks weren't
sufficiently in-depth to be useful (DNS was only done for the
wesnoth.org hostname, for example, and not much information about the
test could be passed to the web front-end).

In order to solve these shortcomings, we are now properly defining a
"facility" concept for each wesnoth.org facility, each one having an
associated IP address, description, protocol, and other information.
This should make it far easier to update existing entries or even add
new ones in the future (or even read this configuration from a separate
file!).

More information is now recorded for the front-end for every single
facility, and the output file is now in JSON format so that we can do
whatever we want with the report without worrying about its structure.

The front-end still needs to be updated to understand JSON and the new
facility-based reporting, though.
Merge branch 'master' into version2
valen: Include facility names in the json report

When not defined, fallback to the facility hostnames.
valen: Add facility names
valen: Make facilities an array instead of an object so json preserves order

This is the only way to make the front-end order facilities in a
specific fashion without adding an order field or something.
valen: Several data structure layout changes I'm too lazy to document
valen: Implement link lists for facilities
valen: Hide the status.wesnoth.org facility, we only want the DNS status
valen: Forums > wiki
valen: Changed facility/instance descriptions and test order
web: Initial version of the new front-end

The new front-end understands the new report format in JSON and includes
various new features, some of which are still a work in progress:

 * Toggleable help section (seems useless, will probably go away before
   merging into master)

 * Cleaner and neater display, including backend-defined web page link
   lists for further information about facilities

 * Timed page refreshing using Javascript to align the refresh interval
   to clock (so that it will be later possible to schedule page
   refreshes to take place right after the valen backend cronjob has
   completed)

 * Real-time updating of more human-readable refresh interval and report
   age displays (also using Javascript)

 * Hopefully more robust code to handle situations where the valen
   report is unavailable or broken

 * DNS pseudo-facility, including a list of broken hostnames when
   applicable

Sadly, it doesn't currently make coffee.

NOTE:

This code is still largely unoptimized (much like the report format),
and not suitable for production use yet.
valen: ellapsed -> elapsed
valen: Add response timing info in milliseconds to probe reports

It might be worth it to add timing reports to the front-end at a later
point. In order to enable this, we have to keep the temporary otimer
objects formerly created by check_url() and check_wesnothd() in a scope
that can be reached by the report generation code, hence this patch is a
bit more noisy than expected.
web: Use empty() instead of sizeof() comparisons with arrays
valen: Use splice to build @wesnothd_ports_all
valen: Minor code cleanups
valen: Code cleanup and refactoring
valen: Use Getopt::Long
valen: Implement refresh_interval configuration option for the web frontend
valen: Display configuration on startup when $debug is set