std::trie: add an mutable-values iterator.
std::trie: remove some obsolete internal iterators.
std::trie: use macros to share code between the iterator implementations.
std::trie: Add some iteration/search benchmarks.
std::trie: make lower_bound and upper_bound about 15% faster.

I believe this is mainly due to code-size reduction.

Before:

    test [...]::bench_lower_bound ... bench:       818 ns/iter (+/- 100)
    test [...]::bench_upper_bound ... bench:       939 ns/iter (+/- 34)

After:

    test [...]::bench_lower_bound ... bench:       698 ns/iter (+/- 60)
    test [...]::bench_upper_bound ... bench:       817 ns/iter (+/- 20)
extra::treemap: use the dummy-macro trick with items to make the
iterator macro properly hygiene.

Requires less repetition of `mut` or not too.
auto merge of #11342 : huonw/rust/trie-mut, r=alexcrichton

- Add `mut_iter`, `mut_lower_bound`, `mut_upper_bound`
- Remove some internal iterators
- Add benchmarks
- Improve performance of `{mut_,}{lower,upper}_bound`
- Minor clean-up of `extra::treemap` after I realised I wasn't exploiting macros to their full DRY potential.