Correct the early/late distinction logic in stime_range.cf

I'd correctly documented, in the comments, the comparisons needed; but
I'd got the tests the wrong way round in the policy language code.
Clarified a comment earlier, while I was fixing that.
Merge pull request #1957 from ediosyncratic/stime-test-fix

Correct the early/late distinction logic in stime_range.cf
Acceptance test for nested list expansion.

Covering various cases that have been problematic:

- nested lists where one list combination will be empty
- expansion of foreign lists
- passing of empty lists into methods as parameters

See Redmine #6553
Follow up to fixes for redmine/6553

With the previous fix, iteration skips the entire promise if
any of the lists to be iterated over is empty. This leads to
incorrect behavior in case of nested lists, where one of the
combinations of lists would be empty. Acceptance test addition
covers this case as well now.

The fix is now more intrusive. We don't include empty lists
any longer when parsing the string during expansion. Instead,
abort expansion, and skip this particular promise iteration.

The previous fixes remain in place.
Skip method evaluation if any parameter is cf_null

Fixes another Redmine #6553 case
Revert "Temporary fix: inline the suppress/soft list evaluation."

This reverts commit c96a9a1c0117018899d92958fefa89bbce685311. No
longer required after additional fixes made to list expansion.
Merge pull request #1958 from vohi/redmine/6553-fix

Follow up on regressions introduced by initial fix for redmine 6553
Redmine #6558: Fix LookupAccountName error message on Windows.

Don't report error for user name "root" on Windows, since it is not
expected to exist.
Merge pull request #1959 from kacfengine/redmine6558

Redmine #6558: Fix LookupAccountName error message on Windows.
Change: Fix laterthan test

The or() function returns a string, not a boolean.
https://docs.cfengine.com/latest/reference-functions-or.html
Merge pull request #1960 from nickanderson/fix_laterthan_test

Change: Fix laterthan test
Add: Acceptance test for ifelapsed

Ifelapsed should always be respected, especially at the individual
promise level.

Ref: https://dev.cfengine.com/issues/6334
Adjust test so that it fails for the right reasons.

Test passes if second cf-agent invokation also uses -K, which
is expected (and a crude workaround). But at least it shows that
the test is implemented correctly now.

Using ifelapsed => 0 in the method promise in bundle example
is necessary.

The regex can probably be made less aggressive, but it does the job.
Implement the currently held locks as a stack.

The atexit handler can then clean up the entire stack of
currently held locks, rather than only the one that was
acquired last.

If any promise sets an abort class, the exit handler is
called, cleaning up the stack. Promises in the next run
are then no longer blocked, and usual lock elapse kicks in.

Fixes Redmine #6334