Set totalTime at end of result merging, rather than at toXContent

Previously the totalTime was "merge down" the tree when the data was recursively emitted as
JSON.  This breaks the Java client, since it accesses the object tree directly and never gets the
totalTime merged down.

Now we just do it at the end of shard result merging
[TESTS] Add more query types to test
Add method disambiguation to the Query Walker

Previously, the multiple dispatcher would spew if it encountered multiple potential method matches.
This adds the ability to specify a Disambiguator which can choose from amongst the possible
matches.

The default behavior, if a disambiguator is not specified, is to continue throwing exceptions.

The ProfileQueryVisitor will try to choose the more specific of methods (e.g. BooleanQuery instead of
Query), with potential to fallback to basic Query.