Implement bounded iterators for BTree

Part of collections reform v1, #18424
Also, iteration is simplified:
```
before
test btree::map::bench::iter_1000                          ... bench:     17177 ns/iter (+/- 6302)
test btree::map::bench::iter_100000                        ... bench:   1735731 ns/iter (+/- 23908)
test btree::map::bench::iter_20                            ... bench:       386 ns/iter (+/- 148)
after
test btree::map::bench::iter_1000                          ... bench:     15777 ns/iter (+/- 346)
test btree::map::bench::iter_100000                        ... bench:   1602604 ns/iter (+/- 73629)
test btree::map::bench::iter_20                            ... bench:       339 ns/iter (+/- 91)
```
cc @gereeter @cgaebel
r? @Gankro
OK so my understanding of this code:

* Step one: find where the two search paths diverge, and populate leftmost and rightmost with the appropriate edges of the LCA to refine their search-paths with in step two.
  * In the totally unbounded case, this is trivial; just take the root and call it a day.
  * In the half-bounded case, where they diverge is simply where the search path for the bound breaks off from the "side" of the tree. So we set up the right(left)most variable to be the root, and have step two handle it.
  * In the totally bounded case we actually need to find the LCA and "grind" it down to where the left and right search paths are. Then we place it in the "center" of the ringbuf for the left and right paths to "surround" in step two.
* Step two: If it is not None, then push right(left)most to search further for its bounding element. At each node we visit in this way, push an iterator containing everything to the left (right) of this search path. 

The end result is two search paths encoded as a deque containing (left-to-right): a series of truncated-from-the-left iterators, the LCA's doubly-truncated iterator, and a series of truncated-from-the-right iterators.

ASCII art-ed:

```
            /root\                /root\         
           /   /  \              /   /  \
          /    \   \            /    \   \
         /     LCA  \          /      3   \
        /      /--\  \        /      2--4  \
       /      /---/   \      /      1---5   \
      /      /----\    \    /      0----6    \
         left   ^  right     indices in deque
          range to iter      (some junk empty iterators may be included as an impl detail)
```