Parse raw Ferret queries into tokens before processing them
This allows the query layer to figure out which parts should be substring vs term match, and would allow the SearchEngine layer to do author:... eventually by picking it out before sending it to the Ferret engine.
Test Plan: Ran some Ferret queries. They work like before, except that nonsense like -+"quack" raises an exception now.
Reviewed By: chad
Maniphest Tasks: T12819
Differential Revision: https://secure.phabricator.com/D18499