hal_library: add support for rings, groups, remote components, iterators

This commit adds several new HAL objects and API calls:

HAL Groups: collections of signals, for the purpose of reporting by haltalk.
See hal_group.h for the API.

HAL ringbuffers: the RTAPI ringbuffers are anonymous objects in shared memory.
HAL rings make these named HAL objects, and enable allocation of buffers
either in a RTAPI shared memory segment, or HAL memory. HAL ringuffers add
a 'scratchpad' area (optional shared memory beyond the ringbuffer per se) to
support cooperative components consisting of a userland and realtime part;
the scratchpad makes it easy to add shared state between those. See hal_ring.h for the API.

HAL remote components: an extension of the local component. See the protocol
spec documents for those. API as per hal_rcomp.h.

HAL iterators: iterating over collections has been a lowlevel coding pain due
to the lack of generalized iterators. See hal_iter.h for the API. Note locking
requirements - many HAL functions (those prefixed with hal_) acquire the HAL
mutex; calling such a function from another hal_ method may result in deadlock.

Serialisation/Deserialisation of HAL objects from/to protobuf messages: since
this is a common task, moved to halpb.cc .

Automatic change detection and reporting: To speed up this common task,
groups and rcomps are translated into a 'compiled' data structure which is
optimized for quick execution:

HAL Groups:
see halpr_group_compile/hal_cgroup_match/hal_cgroup_report APIs, used in haltalk.

HAL Remote Components:
see hal_compile_comp/hal_ccomp_match/hal_ccomp_report in haltalk.

Float pin change detection: remote components and groups need change detection,
including float pins. Testing for float equality is not a good general choice
for change detection. HAL hence supports a set of 'epsilon values' (currently 5,
numbered 0..4 which can be set at the halcmd or C API level, and enable
trading off tracking accuracy versus network overhead.

halextmodule.cc is a boost-based Python binding used during development; this
will be replaced by Cython-based bindings.
halcmd: support for new HAL capabilities (rings, groups, remote components)

HAL Groups, rings and remote components can now be inspected and modified
by halcmd.

Epsilon values can be set and associated with pins and signals for group and
rcomp change detection.

halcmd now talks to rtapi_app for all thread flavors through a zeroMQ/protobuf
based RPC interface (see halcmd_rtapiapp.* and the rtapi_message.proto definitions). This works over an IPC (unix domain) socket since interaction with rtapi_app must be local anyway.

This RPC interface signifcantly simplifies halcmd interaction with RT, and closes several issues.
halsh: retrieve MKUUID from MACHINEKIT_INI

since it uses halcmd objects to connect to rtapi
http/webserver: www root directory
webtalk: websockets/JSON <-> zeroMQ/protobuf bridge
haltalk: remote access and monitoring of HAL objects
machinetalk/nanopb: import version 0.27

nanopb_generator.py - adapt to machinekit nesting structure
+    #import proto.nanopb_pb2 as nanopb_pb2
+    #import proto.plugin_pb2 as plugin_pb2
+    import nanopb_pb2
+    import google.protobuf.compiler.plugin_pb2 as plugin_pb2
machinetalk/lib: fold various support functions into libmtalk.so

zeroconf, logging, protobuf utility code, avahi/czmq poll support, json/pb
conversion, ini helper
machinetalk/libmtalk: include files
syslog_async: remove from rtapi subdirectory

this is now subsumed in the libmtalk userland library.
machinetalk/support: demo files for en/decoding
machinetalk/scripts: conversion scripts for NML type tags
machinetalk/config-service: simple support server for remote UI's
machinetalk/config-server: QML demo files for QtQuickVCP
machinetalk: build support, dependency generator for protobuf files
hal/hal_glib.py: add remote HAL component support
gladevcp/makepins.py: support remote HAL components
python/servicediscovery: zeroconf support for gladevcp

A zeroconf browser connected via signals. Uses the avahi/dbus interface.
hal/gladevcp: adapt fore remote operation
gitignore generated files