Implementing a new $(sys.uptime) variable (Mantis #1134)

The $(sys.uptime) variable contains the number of mintues the system
has been up and running. It uses various techniques depending on the OS
platform to find the system uptime:

* sysinfo() for Linux platforms
* kstat() for Solaris platforms
* pstat_getproc() for HP-UX
* sysctl() for BSD platforms

Any platform which doesn't have one of these methods available will default
to a stat(/proc/1) to get the create time of the init process, which falls
within a few seconds of the boot time of the system. (Even though Linux and
Solaris have /proc, this method is not used on those platforms even as a
fallback.)

If any of these approaches fail, the routine falls back to running the
"/usr/bin/uptime" or "/bin/uptime" command, and its output is parsed into
days, hours, and minutes with a PCRE regexp, and converted to a usable time
for the variable. Thanks to Ted Zlatanov for the suggestion: https://github.com/cfengine/core/pull/46#issuecomment-10066632

This popen() approach is unlikely to be used very frequently - probably only if
the /proc filesystem isn't mounted - but it's a decent backstop to give a
system the best possible chance to set $(sys.uptime) successfully.

Two other closely related variables are introduced: $(sys.systime) and
$(sys.sysday). The former is simply the result of the time() system call,
which is useful in manipulating timestamps in HP-UX TCB password databases,
for example, and the latter is that value divided by 86,400 - the number of
seconds in a day - expressed as an integer. This is, of course, useful in the
/etc/shadow file to indicate the password change date.

Three new documents are added in docs/reference/vars to describe the
$(sys.uptime), $(sys.systime), and $(sys.sysday) variables.
BSD <sys/param.h> include is required for <sys/sysctl.h> header checks

See also jail.h, sys/mount.h checks.
64-bit time_t snprintf; cf_popen needs pipes.h - for sys.uptime var

The cf_popen() and cf_pclose() calls now need to have pipes.h included,
because it was factored out in commit 5be64d09bc4c9c9659d53d2b5bf61286f768acbf.

The time_t type needs the proper printf format to support both 32- and 64-bit
platforms. On older platforms which don't have a C99-compliant snprintf, the
"pub/snprintf.c" replacement is used, so that a "%jd" format can be used even
on such platforms. Normally they would use the PRIdMAX definition from
inttypes.h. See commit f6ba42d5b2988be1f94ee4e55baa174fd7906362.
Added FreeBSD portmaster package_method
Redmine 2573; prevent HP-UX type-punned pointer in FD_SET()

Related to Redmine 1802 and pull request 287.

While the HP-UX "fd_set" type is defined in /usr/include/sys/_fd_macros.h
as a struct of an array of "long" values in accordance with the XPG4
standard's requirements, the macros for the FD operations "pretend it is
an array of int32_t's so the binary layout is the same for both Narrow
and Wide processes," as described in fd_macros.h. In the FD_SET, FD_CLR,
and FD_ISSET macros at line 101, the result is cast to an "_fd_mask *"
type, which is defined as int32_t at _fd_macros.h:82.

This conflict between the "long fds_bits[]" array in the XPG4-compliant
fd_set structure, and the cast to an int32_t - not long - pointer in the
macros, causes a type-pun warning if GCC -Wstrict-aliasing is enabled. The
warning is merely a side effect of HP-UX working as designed, so it can
be ignored.
Remove globals INFORM, DEBUG, VERBOSE, use LogGet/SetGlobalLevel

This fixes an issue where the TLS log context was initialized from
global variables before options were read.
Merge pull request #646 from mvpel/redmine_2573

Redmine 2573; prevent HP-UX type-punned pointer warning in FD_SET()
Fix: POLICY_SERVER has size CF_MAX_IP_LEN. Adjust code that write to it accordingly

(cf3.defs.h: #define CF_MAX_IP_LEN 64)
Fix ACL test.

This is just working around issue 2621.
Merge pull request #647 from kacfengine/fixAclTest

Fix ACL test.
 fix server filter cleanup call
Merge pull request #648 from maciejmrowiec/master

fix for clean server filter call
For new logging, do not print empty classes augmented/diminished
Review messages with LOG_LEVEL_DEBUG
Make ACL test detect missing ACL capability in filesystem.
Merge pull request #649 from kacfengine/fixAclTest

Make ACL test detect missing ACL capability in filesystem.
Update HACKING
Added a check if we start with the keyword "bundle" or "body" + unit test
Made the acceptance test template more Windows friendly.
(cherry picked from commit c1cf05a1984980c5fda172454679deb415de70cb)
Don't return FNCALL_FAILURE in FnCallReturnsZero.

While it might seem more correct, for "returnszero()" it has the
unintended side effect of making this policy

  classes:
    "commandfailed" not => returnszero("/bin/nosuchcommand", "noshell");

not set the "commandfailed" class. This happens because FNCALL_FAILURE
will never set *any* class, regardless of the negation used.