Allowing metrics store to perform queries either missing types OR missin...

...g groups (the store will query the best index in both situations). One of these MUST still be supplied, however.
Can we just encapulate the logic for querying one table in one method and one in another.  It would help to cut down on all the crazy branching in this method to account for all the possibilities.

So if (types.size() > 0) reverseMetricScanner(...) else forwardMetricScanner(...)

This eliminates the need to verify types size below because you know in each of these private methods that they those conditions have been met.  You can even add in Precoditions.checkArguements to verify them before the calls.