Mail report: always set the X-CFEngine mail header (Redmine #2403)
Log messages improvements in mail report code:

 * Add context for messages (Mail report:)
 * log levels: if the message is an error, use LOG_LEVEL_ERR
make use of shortcut masterfiles, see https://github.com/cfengine/masterfiles/pull/312
It first tries to use the shortcut and if this fails fallback to old method for backwards compatibility
This addresses the issue in redmine #3697
inspired by Nick Anderson
fix the insane limits of laterthan, max year 1000 makes it useless. Redmine #6530.
generated the bootstrap.inc with test2cstring.pl as requested by @kacfengine
Introduce soft failures.

The intention is to have a kind of fail state that is appropriate for
using in test cases that document bugs. There is a subtle, yet
important different between a suppressed and a soft failure. A
suppressed failure counts as a real failure in the XML output, and
will be reported as a failure in graphs. Soft failures OTOH, will be
reported as skipped in the XML output, but will still run and will
block the build if they pass unexpectedly.
Merge pull request #1936 from kacfengine/test_soft_fail

Introduce soft failures.
Merge pull request #1909 from estenberg/bugfix/laterthan

laterthan fix and acceptance tests
Rename 'vbuff' to the more appropriate 'randfile'.
Restore support for denormal times in laterthan() and add it in on().

If someone specifies a date-and-time while adding an offset to one of
the components (e.g. to specify a given number of days, or hours,
after some specified event whose date and time are known) we can
handle that, doing The Right Thing (as handled by mktime, normalising
the date-time sensibly), by simply not forbidding it.  Recent changes
to laterthan() removed support for this; on() has not previously
supported it; but it makes sense to support it for both, so I'm
allowing both to take values in a wide (but still limited) range.
Also, move on()'s argument description to alongside those for the
other time-related functions with the same arguments.
For vailidating input files we must use GetInputDIr(), because we can override its setting via configure options,
see https://dev.cfengine.com/issues/6551
Merge pull request #1933 from basvandervlies/use_masterfiles_shortcut

make use of shortcut masterfiles
Remove the uninitialised buffer PRNG seed.

Use instead some rand() filled buffer. It is a bug if even that is not
enough, so complain loudly with UnexpectedError() (but try to continue).

In any case these kinds of hacks shouldn't be used, so print a
LOG_LEVEL_INFO message if that is necessary (e.g. on chroots that don't
have /dev/urandom). Still can be avoided by using WORKDIR/randseed.
Seed C PRNG with weak data, seed the OpenSSL PRNG...

...with bytes from rand() only if system's source of entropy is good.
join: Don't add delimiter if only null-values are left

Looks like a nested loop that introduces polinomial complexity,
but the inner loop advances the outer loop as well.

Fixes Redmine #6552
Merge pull request #1944 from jimis/entropy

Do not seed PRNG with uninitialised stack buffer.
comment
Taken into account @ediosyncratic's review.
Eliminate FnArgsToTmBase1Month()'s duplicate code.

Just adjust the month and day-of-month returned by FnArgsToTm().
Copy, paste and tweak a bit is easy but that's not a reason to do it.
Added some clarifying comments to FnArgsToTm().
Make laterthan.cf 32-bit safe.

On systems with a 32-bit time_t, the max and min are 68 years and 19
days.  So don't test outside that range !