Cut over XBooleanFilter to BitDocIdSet.Builder.

The idea is similar to what happened to Lucene's BooleanFilter.

Yet XBooleanFilter is a bit more sophisticated and I had to slightly
change the way it is implemented in order to make it work. The main difference
with before is that slow filters are now applied lazily, so eg. if you have 3
MUST clauses, two with a fast iterator and the third with a slow iterator, the
previous implementation used to apply the fast iterators first and then only
check the slow filter for bits which were set in the bit set. Now we are
computing a bit set based on the fast must clauses and then basically returning
a BitsFilteredDocIdSet.wrap(bitset, slowClause).

Other than that, BooleanFilter still uses the bitset optimizations when or-ing
and and-ind filters.

Another improvement is that BooleanFilter is now aware of the cost API.