ENH: magic_timeit -- waste less time to estimate number of runs + aim for target timing

With original implementation number of runs to do can vary 10-fold from time to time.
Moreover it might take up to 2 sec only to estimate how many runs is needed before even
running any benchmarks.

This implementation grows number by powers of 2 instead of 10, which minimizes the spread
of 'number' any given benchmark might do across different runs.  Also it estimates power to bring
to instead of going one at a time which is not much but helps a bit + if it estimates that
after last increment it should 'meet' expected timing it breaks loop as well without
next timing.

This way with default options (target_timing=0.3, 3 repeats) it completes benchmarks usually
within 2 seconds.