squash! [sieve] flags.c: verify_flaglist(): don't return an empty flag list

[sieve] properly handle NULL flag lists

message.c:
- changed do_setflag() to only clear out the flag list
 - use do_addflag() to add any flags after clearing the list

script.c:
- ACTION_SETFLAG: only clear out the flag list

bc_eval.c:
- B_KEEP, B_FILEINTO, B_SETFLAG: only add non-null strings to flaglist
- B_SETFLAG: consolidate addflag code
squash! [sieve] add imap4flags awareness to sieve interpreter
Revert "[sieve] update sievec to use sieve_register_hasflag()"

This reverts commit 869bf3f1a19d6e4f5bdb511a9faf50c3f2fe7458.
fixup! [sieve] bytecode: don't emit unused :index parameter for hasflag test
squash! [sieve] bc_eval.c: add :count match-type support to hasflag test

We can't have :count and :regex at the same time since they are both
MATCH-TYPEs
[sieve] sieve.y: remove bytecode dependence on sieve.y

The internally #define'd COPY was unnecessarily assigned to a structure
that ended up being part of the bytecode.  Since it is a true/false
value, we simply assign a value of 1 instead of the value of COPY.
fixup! [sieve] add parser support for imap4flags
squash! more comments for tests

[sieve] add legacy test cases for :flags argument to fileinto and keep
[sieve] add legacy test cases for hasflag test