store: Split internal store_obj() function into multiple functions.

This avoids a couple of unnecessary checks and will allow to reuse some parts.
store: Don't destroy an attribute if data_copy() failed.

Else, the store would reference invalid memory.
data: Improved memory handling in data_copy().

Ensure that dynamic memory in the destination is freed before copying the new
data. That'll avoid that the caller has to use data_free_datum() first and
destroy previous data even if the copy fails.
store: Consider objects too old if the new timestamp matches the old.

In theory, this doesn't make a big difference as either approach will let the
result depend on the order of update operations. However, considering more
cases as too old will allow to ignore more stuff and, thus, avoid some work.
store: Introduced service attributes.
store: Don't overwrite attribute values if the new timestamp is too old.

Also, extended the unit tests to catch this error.
data: Pass const pointers to sdb_data_cmp().
store: Don't update unchanged attribute values.

When handling dynamically allocated data, this would generate unnecessary
memory churn.
store: Include service attributes in JSON output.
unixsock, data: Moved sdb_unixsock_parse_cell() to sdb_data_parse().

The function parses a string into a datum. For date-time values, floating
point seconds since the epoch are supported only.

Added unit tests.
store: Reduce logging about "old" values.

Don't log, if the same timestamp was used to submit the value. This avoids
excessive noise in the logs on high sampling rates.
collectd::unixsock backend: Added support for spaces in identifiers.

Don't treat space as a field separator for LISTVAL responses. Instead, split
of the update timestamp from the hostname after splitting at slash characters
only.
collectd::unixsock backend: Store plugin identifier as service attributes.
Makefile: Install utils/os.h as well.
Moved compare and lookup callback types from utils/llist to core/object.
utils avltree: Started implementation of an AVL tree.

So far, it's just an unbalanced binary tree, though ;-)
avltree_test: Test duplicate detection and clear() as well.
coverage.sh: Ignore *.y / *.l files.

lcov cannot handle them correctly.
sysdb.h: Added helpers to compare two values.
avltree: Removed some irrelevant special cases.