Improved Find/Replace UI

Not done yet, but pushed in case anyone else (@larz0?) wants to play with it.

Finished so far:
* Replace is now a single UI rather than a 3-stage "wizard."  Instead of Yes/No/Stop, there's a single Replace button.
* Replace now shares most of its code with Find, so Replace gets incremental search, match highlighting, match counting, and tickmark indicators.
* Enter is treated as Find Next instead of closing the search bar.  (And Shift+Enter = Find Prev)
* Streamlined UI: match count hovers inside query field, regexp errors appear in a popup below the query field, next/prev buttons don't dynamically show/hide, related buttons are clustered tightly, and eliminated labels in favor of prompt text inside the replace field.
* Explicit toggles for regexp & case-insensitive -- no longer auto-detecting based on what the query string looks like.  Toggles are shared across Find, Replace, & FindInFiles and are persisted as a pref.
* Find Next uses editor cursor pos rather than an invisible saved pos (this is part of the future [Correct Find Next Behavior](https://trello.com/c/0GXqt5GF/1089-correct-find-next-behavior) story, but it simplified the code here so I went ahead & did it now).
* Keyboard shortcut for Replace button -- just use the regular Replace shortcut while the bar is open.  So you can do a replace operation entirely from the keyboard, just using the Find Next & Replace shortcuts.
* Unit tests

Not implemented yet:
* Decide whether to unify Find & Replace into a single command (i.e. you'd never see the simpler Find-only UI anymore)
* Final visual polish -- make search/replace fields dynamically fill available width? Etc.

Things to test:
* Find
* Replace
* Replace All (no functionality changed inside the panel, but make sure launching the panel works right)
* Find in Files