[sieve] add imap4flags reference

added RFC 5232 to references in preparation of implementing "imap4flags"
sieve extension

Big changes will be the addition of:
- the "hasflag" test
- the ":flags" argument to "keep" and "fileinto"

Additionally, "mark" and "unmark" actions will be deprecated.
specs.html: add Sieve imap4flags spec
[sieve] add parser support for imap4flags

added parser support for:
- hasflag test
- :flags tagged argument to fileinto and keep

also added imap4flags to sieve_extensions in imapoptions
[sieve] add imap4flags awareness to sieve interpreter

add the following to the sieve interpreter:
- awareness of the hasflag test
- test whether imap4flags is 'require'd
part of parser support for imap4flags
[sieve] update bytecode to support imap4flags

add imap4flags support to bytecode, specifically:
- updated B_KEEP to support :copy and :flags
  - :copy support in KEEP had been previously overlooked
- updated B_FILEINTO to support :flags
- new BC_HASFLAG to support imap4flags hasflag test
[sieve] imap4flags support for bytecode generator

update bc_generate.c for imap4flags as follows:
- add hasflag test support to bc_test_generate()
  - based on header test
- add :copy and :flags support to KEEP
  - :copy is an integer; :flags is a stringlist
- add :flags support to FILEINTO
[sieve] update sievec to use sieve_register_hasflag()
[sieve] imap4flags support for bytecode emitter

update bc_emit.c for imap4flags as follows:
- add hasflag test support to bc_test_emit()
  - based on header test
- add :copy and :flags support to KEEP
  - :copy is an integer; :flags is a stringlist
- add :flags support to FILEINTO
  - duplicated code that had been shared between FILEINTO and REDIRECT
sieve.y: fix use after free() in parser

Don't free the flags stringlist because it is used later.

This caused much headache.  stringlist pointers to what was expected
to be flags ended up being another stringlist later allocated, having
nothing to do with the expected flags stringlist.
[sieve] enable parser support for :copy and :flags in KEEP

enable copy and imap4flags extensions support for KEEP action
sieve.y: fix :flags argument to KEEP

we were accessing the wrong member of the union in the commandlist
[sieve] imap4flags support for bytecode decompiler

update sieved.c for imap4flags as follows:
- add hasflag test support to dump2_test()
- add :copy and :flags support to KEEP in dump2()
- add :flags support to FILEINTO in dump2()
bc_dump.c: hasflag test support

I can't find anywhere that bc_dump.c is actually used.  Is this work
useful?  Still need KEEP and FILEINTO support of :flags
[sieve] bc_emit.c: fix comment

Comments were backwards of what was actually happening.
Relation comes before comparator in the bytecode.
[sieve] only 'fileinto' once per folder (RFC 3028)

Make do_fileinto() consistent with do_keep() in that if the action is
requested a second time, simply disregard the second and subsequent
request.

RFC 3028 [SIEVE]:
2.10.3.  Message Uniqueness in a Mailbox

   Implementations SHOULD NOT deliver a message to the same folder more
   than once, even if a script explicitly asks for a message to be
   written to a mailbox twice.
[sieve] fileinto: ensure last flag list value wins (RFC 5232)

The naive way of eliminating duplicates resulted in the first
(rather than the last) flag list value winning.  A solution
is to move the action to the end of the action list, ensuring
the last flag list value wins.

RFC 5232 [imap4flags] Sec 3. Actions:
   Note that when keep/fileinto is used multiple times in a script and
   duplicate message elimination is performed (as described in Section
   2.10.3 of [SIEVE]), the last flag list value MUST win.

RFC 3028 [SIEVE]:
2.10.3.  Message Uniqueness in a Mailbox

   Implementations SHOULD NOT deliver a message to the same folder more
   than once, even if a script explicitly asks for a message to be
   written to a mailbox twice.
[sieve] keep: ensure last flag list value wins (RFC 5232)

The naive way of eliminating duplicates resulted in the first
(rather than the last) flag list value winning.  A solution
is to move the action to the end of the action list, ensuring
the last flag list value wins.

This change has been copied from do_fileinto() to do_keep()

RFC 5232 [imap4flags] Sec 3. Actions:
   Note that when keep/fileinto is used multiple times in a script and
   duplicate message elimination is performed (as described in Section
   2.10.3 of [SIEVE]), the last flag list value MUST win.

RFC 3028 [SIEVE]:
2.10.3.  Message Uniqueness in a Mailbox

   Implementations SHOULD NOT deliver a message to the same folder more
   than once, even if a script explicitly asks for a message to be
   written to a mailbox twice.