Break out query parsing from setting the query in the model...

...so FindInFilesUI doesn't need to touch the model before the search starts (for #6966).

@peterflynn This approach makes it so we don't have to deal with multiple models. There really wasn't any reason for FindInFilesUI to touch the model before actually starting the search, because all it needed was to parse the query and get error info. One the search starts, it's ok to clear the model at that point (and the existing code already does that in `FindInFiles.doSearchInScope()`).
Ah, I see -- all those utilities guarantee that their top-level statements consist of nothing but runs() and waitsFor() calls (or calls to other functions with the same guarantee).  I'll add a comment on them indicating that.

I wonder if we should have a naming convention for functions that are safe to call in this way?  E.g. it's hard to tell in this suite that doSearch() is safe to call without wrapping in runs() but doReplace() is _not_ safe.