Right now filter aggregations run in "compatible" mode if the top level query is `bool: {filter: { match_all: {}}}}` - but this really just just `match_all` in disguise. We should just run in filter-by-filter mode here.
server/src/main/java/org/elasticsearch/common/Rounding.java
* example, with interval based rounding, if the interval is
     * 3, {@code nextRoundValue(6) = 9}.
     * @deprecated Prefer {@link #prepare} and then {@link Prepared#nextRoundingValue(long)}
     */
    @Deprecated
    public final long nextRoundingValue(long utcMillis) {
        return prepare(utcMillis, utcMillis).nextRoundingValue(utcMillis);
    }
    /**
     * How "offset" this rounding is from the traditional "start" of the period.
     * @deprecated We're in the process of abstracting offset *into* Rounding
     *             so keep any usage to migratory shims
     */
    @Deprecated
    public abstract long offset();
    /**
     * Strip the {@code offset} from these bounds.
     */
    public abstract Rounding withoutOffset();
    @Override
    public abstract boolean equals(Object obj);
    @Override
    public abstract int hashCode();
    public static Builder builder(DateTimeUnit unit) {
        return new Builder(unit);
    }
    public static Builder builder(TimeValue interval) {
        return new Builder(interval);
    }
    public static class Builder {