AdvancedQueryParser's lexxer can actually handle double quotes:
for query a "b c" d, it returns three tokens (a, b c, d).
However, when building Term, all of them end up having Auto comparator,
which for strings then resolves to Contains.
Finally, inside SearchStore::constructContainsQuery, we simply split such
multi-word term and build an EngineQuery::StartsWith query for b and c.
This patch sets Equal comparator for those terms that are inside double quotes.
For that we call SearchStore::constructEqualsQuery, which treats it as
EngineQuery::Phrase, which is precicely what we want.
Code-wise, it's more convenient to create a separate class Token (instead of
treating tokens as QString), which is aware if this token is inside double quotes.
This patch also moves some of the token-processing routine inside this class
(see toVariant, toComp, toOp methods)
Also, introduce various tests with double-quoted queries.