index_btree: don't re-load and re-parse index blocks unnecessarily
index_btree: don't re-load and re-parse index blocks unnecessarily

Caches the index tree iterators after a lookup, and on the next lookup,
if the same blocks are accessed again, re-uses the same iterator.

For the case of a small index (eg for bloom files which aren't very
large) this is about 1.5x speedup:

Before:
 Performance counter stats for './bloomfile-test --benchmark_queries=10000000 --bloom_size_bytes=32768 --n_keys=100000' (5 runs):

       4498.454767 task-clock                #    0.998 CPUs utilized            ( +-  2.11% )
               422 context-switches          #    0.000 M/sec                    ( +-  1.88% )
                 1 CPU-migrations            #    0.000 M/sec                    ( +- 61.24% )
             1,131 page-faults               #    0.000 M/sec                    ( +-  0.02% )
    12,596,382,428 cycles                    #    2.800 GHz                      ( +-  2.23% )
     4,062,714,630 stalled-cycles-frontend   #   32.25% frontend cycles idle     ( +-  6.19% )
     2,232,621,881 stalled-cycles-backend    #   17.72% backend  cycles idle     ( +-  8.96% )
    21,611,472,476 instructions              #    1.72  insns per cycle
                                             #    0.19  stalled cycles per insn  ( +-  0.00% )
     4,300,792,459 branches                  #  956.060 M/sec                    ( +-  0.00% )
        22,886,710 branch-misses             #    0.53% of all branches          ( +-  0.10% )

       4.505244639 seconds time elapsed                                          ( +-  2.11% )

After:
 Performance counter stats for './bloomfile-test --benchmark_queries=10000000 --bloom_size_bytes=32768 --n_keys=100000' (5 runs):

       2903.229555 task-clock                #    0.998 CPUs utilized            ( +-  0.71% )
               288 context-switches          #    0.000 M/sec                    ( +-  0.67% )
                 2 CPU-migrations            #    0.000 M/sec                    ( +- 52.44% )
             1,133 page-faults               #    0.000 M/sec                    ( +-  0.02% )
     8,254,408,744 cycles                    #    2.843 GHz                      ( +-  0.80% )
     2,624,615,852 stalled-cycles-frontend   #   31.80% frontend cycles idle     ( +-  1.88% )
     1,357,933,811 stalled-cycles-backend    #   16.45% backend  cycles idle     ( +- 11.17% )
    13,878,011,884 instructions              #    1.68  insns per cycle
                                             #    0.19  stalled cycles per insn  ( +-  0.00% )
     2,801,038,353 branches                  #  964.801 M/sec                    ( +-  0.00% )
        23,673,917 branch-misses             #    0.85% of all branches          ( +-  0.32% )

       2.908282899 seconds time elapsed                                          ( +-  0.70% )

On a more macro-benchmark mt-tablet-test set to flush lots of small files, 1.25x speedup:

Before:

 Performance counter stats for './mt-tablet-test --inserts_per_thread=1000000 --num_insert_threads=8 --num_updater_threads=0 --num_counter_threads=0 --num_compact_threads=2 --flusher_backoff=1.0 --flusher_initial_frequency_ms=500 --memstore_throttle_mb=1500 --flush_threshold_mb=1 --consult_bloom_filters=1 --tablet_do_dup_key_checks=1 --num_slowreader_threads=0' (5 runs):

     104347.545871 task-clock                #    6.573 CPUs utilized            ( +-  2.90% )
            57,894 context-switches          #    0.001 M/sec                    ( +-  6.00% )
               994 CPU-migrations            #    0.000 M/sec                    ( +-  3.17% )
           351,813 page-faults               #    0.003 M/sec                    ( +-  2.21% )
   181,915,771,191 cycles                    #    1.743 GHz                      ( +-  2.96% )
   120,476,114,516 stalled-cycles-frontend   #   66.23% frontend cycles idle     ( +-  3.04% )
    34,394,212,370 stalled-cycles-backend    #   18.91% backend  cycles idle     ( +-  3.70% )
   159,149,425,511 instructions              #    0.87  insns per cycle
                                             #    0.76  stalled cycles per insn  ( +-  2.74% )
    31,225,235,364 branches                  #  299.243 M/sec                    ( +-  2.90% )
       512,904,397 branch-misses             #    1.64% of all branches          ( +-  1.76% )

      15.875858830 seconds time elapsed                                          ( +-  3.89% )

After:

 Performance counter stats for './mt-tablet-test --inserts_per_thread=1000000 --num_insert_threads=8 --num_updater_threads=0 --num_counter_threads=0 --num_compact_threads=2 --flusher_backoff=1.0 --flusher_initial_frequency_ms=500 --memstore_throttle_mb=1500 --flush_threshold_mb=1 --consult_bloom_filters=1 --tablet_do_dup_key_checks=1 --num_slowreader_threads=0' (5 runs):

      76341.872818 task-clock                #    6.046 CPUs utilized            ( +-  2.01% )
            36,562 context-switches          #    0.000 M/sec                    ( +-  5.28% )
               856 CPU-migrations            #    0.000 M/sec                    ( +-  5.12% )
           414,022 page-faults               #    0.005 M/sec                    ( +-  4.88% )
   134,321,079,342 cycles                    #    1.759 GHz                      ( +-  2.16% )
    85,935,425,315 stalled-cycles-frontend   #   63.98% frontend cycles idle     ( +-  2.23% )
    24,006,510,215 stalled-cycles-backend    #   17.87% backend  cycles idle     ( +-  1.74% )
   126,428,482,630 instructions              #    0.94  insns per cycle
                                             #    0.68  stalled cycles per insn  ( +-  2.31% )
    24,517,664,633 branches                  #  321.156 M/sec                    ( +-  2.38% )
       418,568,544 branch-misses             #    1.71% of all branches          ( +-  1.37% )

      12.626839784 seconds time elapsed                                          ( +-  2.45% )

cloudera/kudu,helifu/kudu,EvilMcJerkface/kudu,andrwng/kudu,InspurUSA/kudu,cloudera/kudu,andrwng/kudu,andrwng/kudu,helifu/kudu,andrwng/kudu,InspurUSA/kudu,EvilMcJerkface/kudu,EvilMcJerkface/kudu,cloudera/kudu,EvilMcJerkface/kudu,helifu/kudu,helifu/kudu,cloudera/kudu,EvilMcJerkface/kudu,InspurUSA/kudu,helifu/kudu,andrwng/kudu,EvilMcJerkface/kudu,EvilMcJerkface/kudu,InspurUSA/kudu,helifu/kudu,cloudera/kudu,helifu/kudu,andrwng/kudu,InspurUSA/kudu,InspurUSA/kudu,andrwng/kudu,EvilMcJerkface/kudu,andrwng/kudu,InspurUSA/kudu,andrwng/kudu,helifu/kudu,cloudera/kudu,cloudera/kudu,cloudera/kudu,helifu/kudu,EvilMcJerkface/kudu,InspurUSA/kudu,InspurUSA/kudu,cloudera/kudu