Extract Venue::SearchEngine

This builds on top of #114, and finishes up the broad strokes of the big search engine refactor. In brief, Venue.search now uses object composition instead of boot-time metaprogramming via a mixin. Aside from all the normal code quality benefits of breaking up large objects, this also allows both search engines to be tested, where neither were before.