GeminiQuery API changed to allow for filtering of variants

For fields not easily queried via SQL, the variants have to be filtered via the
API. The GeminiQuery object now takes a list of predicate functions which a row
must pass before the row is returned. This relieves some of the duplication
that could crop up by filtering for multiple values at once.  I think this
refactoring will greatly simply some of the tools once they are altered to use
it.
Merge branch 'query-refactor'