Functorize Search Services

Summary: This refactors all the search stuff to be generic, separating the AST parsing part from the rest. There's no real logic changes.

It works like this now

searchUtils (shared stuff between trie and fuzzy)
^
trieSearchService  and fuzzySearchService (generic)
^
searchService (generic, talks to fuzzy/trie search service when appropriate)
^
hackSearchService (ast parsing stuff and entry point)

Future steps: get search out of parsing and into it's own package and hook more cleanly.

Reviewed By: @jwatzman

Differential Revision: D1482567