trace_processor: add all bits iterator

This CL adds an iterator implementation for all the bits of a bitvector.

We need this because we often want to iterate through the bits and make
changes as we iterate. This is inefficient if BitVector::Set is used
however, because the counts vector is constantly updated making the
whole algorithm O(n^2).

The new bitvector implementation instead defers updating counts until
the end of each block and only updates the next block's count. This
makes the algorithm O(n) instead.

We also add a base class for the iterator because we also want a
SetBitsIterator which will share much of the code. This common code has
been factored out into BaseIterator.

Bug: 137284957
Change-Id: Ie58cccca87a78e53a60e94006714c11983791613
diff --git a/Android.bp b/Android.bp
index 679b438..52e65e5 100644
--- a/Android.bp
+++ b/Android.bp
@@ -4514,6 +4514,7 @@
   name: "perfetto_src_trace_processor_db_lib",
   srcs: [
     "src/trace_processor/db/bit_vector.cc",
+    "src/trace_processor/db/bit_vector_iterators.cc",
     "src/trace_processor/db/column.cc",
     "src/trace_processor/db/row_map.cc",
     "src/trace_processor/db/table.cc",