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
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
classic protocol could not handle shortcuts. Is necessary for bootstrap
applied suggestion from @ediosyncratic
as requested by @jimis removed the -1 from ShortcutsExpand(filename, sizeof(filename) - 1,
Use conn->hostname and added Changelog as requested/suggested by @jimis
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 !
Reindented laterthan.cf
Merge pull request #1943 from ediosyncratic/denormal-datetime-fix

redmine6554: Restore support for denormal times in laterthan() and add it in on().
Merge pull request #1941 from basvandervlies/validating_input_files_6551

For vailidating input files we must use GetInputDIr()
Merge pull request #1428 from lpefferkorn/mail_report_update

Mail reports update
Misc buffer fixes and documentation improvements from PR 1361.
Merge pull request #1945 from jimis/entropy

Taken into account @ediosyncratic's review.
Merge pull request #1947 from vohi/buffer-docs

Misc buffer fixes and documentation improvements from PR 1361.
Augment acceptance tests with mix of empty/non-empty lists.

Also, move testcase that fails due to bug in format() into
correct directory.

Test cases for Redmine #6553
Iterate correctly over multiple lists.

If any list in an implict iteration is null or contains only null-values,
then the promise shall be skipped entirely.

The previous logic tried to account for (and to some degree, rely
on cf_null) in the list of variable values (var_states). The resulting
logic was overly complicated and didn't correctly abort iteration if
any of the lists was null.

Instead, store in the iterator if we encounter a list that has no
valid values, and implement NullIterators (a function declared
in iterate.h but never implemented) to return true if that was the case
so that we can skip the entire promise.

Remove dead code. This goes a long way towards a complete purging of
cf_null. We can't do so completely as we need to account for policies
that explicitly insert cf_null (many tests), and for functions. If we
were to remove it, then rval.item being NULL would become a valid case,
but a lot of evaluation code treats that as an error.

Fixes Redmine #6553