This commit adds various major and minor improvements
1) (major) pilight now supports multiple protocols per device. In the
feature request users explained that KlikAanKlikUit dimmers can be
controlled by the new KlikAanKlikUit remotes, the old KlikAanKlikUit
remotes, and with the KlikAanKlikUit dimmer remotes. So, in order to
know if the status of a device was changed, pilight needs to check
for either one of those three protocols.

This feature does not limit the combination of protocols. This means
you can combine weather stations, dimmers and switches in one device
(would one have a proper use for it). This means practically that
one can assign multiple weather stations to a single device e.g.
combining a humidity meter with a temperature meter. The GUIs
will interpret the device by the device type of the first protocol.

Check the wiki for a explanation on the new config structure.

2) (major) The webserver cache is now working properly. This means that
the webgui files are only read from the filesystem once, and then
loaded into the memory. This means that when you open the webgui a
second time, the files are no longer read from the filesystem and
thereby reducing the FS IO of pilight. The webserver cache can be
disabled by setting the "webserver-cache" setting in the settings.json
to 0.

3) (minor) pilight previously crashed whenever a GUI sended a value as
an integer (e.g. a dimlevel).

4) (minor) Some memory leaks still occured when the pilight daemon was
stopped early. This happened when a user did not start the daemon
but only wanted to see its version number. By stopping the daemon
in this early stage, the garbage collector was not called.

5) (major) Previously there was no feature that allowed protocols to
push messages to pilight. Only messages that were received by pilight
or that were communicated when a protocol was polled where supported.
This restriction excluded sensors connected to the GPIO pins to
communicate to pilight directly. The new push functionality allows
for protocol creation for sensors connected to the GPIO pins.

6) (minor) The protocols specific settings where not all checked
for validity due to missing functionality. This affected protocol
settings that influenced the behavior of protocol values. An example,
the dimmer protocols allows users to set a min and max dimlevel value.
Previously, pilight did not check if the dimlevel set in the config
was within the min / max range and thereby the config file could
be inconsistent. A new protocol function "checkValues" is introduced
to overcome this lack of functionality.