[sieve] move verify_flaglist() to flags.c for reuse elsewhere

Once we add the variables extension, we won't be able to check for
flag validity in the parser (sieve.y).  This allows us to use
verify_flaglist() wherever else we need it.
[sieve] sieve.y: an invalid flag should not cause a parsing error

[IMAP4FLAGS] Section 2 "General Requirements for Flag Handling" says
"If a flag validity check fails, the flag MUST be ignored", which for
us means that we simply remove the invalid flag from the list.
[sieve] flags.c: verify_flaglist(): don't return an empty flag list

If a flag list is empty after sanitization, return a list with a single
empty string.  This allows the bytecode to reflect the difference
between no :flags parameter, and a :flags "" parameter specifying that
there should be no flags applied.
fixup! [sieve] message.c: add :copy support to keep action
Revert "[sieve] update sieve_fileinto() and sieve_keep() to use :flags parameter"

This removes the actionflags parameter that we added earlier on in
implementing the imap4flags sieve extension.  Since we have removed
dependence on this parameter, we can remove it from the functions that
previously used it.
[sieve] complete removal of no-longer-used actionflags parameter

Removed actionflags parameter from do_fileinto(), do_keep(),
sieve_fileinto_context_t, and sieve_keep_context_t
[sieve] remove superfluous sieve_addflag() and _removeflag() functions

- strarray_add_case() is identical to sieve_addflag()
- strarray_remove_all_case() is identical to sieve_removeflag()
[sieve] bytecode: don't emit unused :index parameter for hasflag test

We initially used identical bytecode for header and hasflag tests.
This patch makes the bytecode formats differ by using a code position
for the :index argument only in the case of a header test.
[sieve] flags.c: fix memory leak in verify_flaglist()
fixup! [sieve] sieved: update bytecode decompiler for imap4flags