tree: switch to std::vector

It appears that the performance is very similar to that of the QVector
tests: simplify the flag building for fake flags
Don't include extra headers
Use std::vector for TreeItem child management

This merges a series of commits which try to improve the speed efficiency of
child housekeeping for the in-memory tree which is maintained by the IMAP model.
This is deliberately not squashed into a single commit so that we can later take
a look at which data structure is actually the best one. The std::vector has
*slightly* bigger memory footprint, but the difference isn't significant and the
runtime performance gain appears to be worth the effort.

REVIEW: 114013
tests: test also compliant FETCH responses

Make sure that we also check the case where the "complicated" identifier is
separated from the rest of the data by a single space, as requested by the RFC.
Do not use dynamic_cast in inner loops and other hot paths

There isn't much point in checking the correctness of our internal tree
representation all the time. Rough measurements indicate that one can get
another 1% speedup by switching to static_cast at these places.

REVIEW: 114014
IMAP: speed up the FETCH response parsing

Previously, the code would happily hit the LowLevelParser::parseList even on the
top-level level, which is rather expensive. Instead of that, this change parses
the individual data fields separately and takes into account the knowledge of
the expected data type. Furthermore, the order in which these fields are checked
against is changed so that FLAGS, UID and MODSEQ are checked first because these
are going to be the most widely encountered entities during mass-syncing, which
was traditionally the bottleneck.

A high-level measurement: the whole test suite takes 9.5 seconds instead of
11.5, i.e. this is a 17.5% speedup.
Switch to faster parsing of FETCH responses

REVIEW: 114015