iterator: implement DoubleEndedIterator for FlatMap
iterator: implement size_hint() for FlatMap
std: Implement RandomAccessIterator for iterator adaptors

Implement RAI where possible for iterator adaptors such as Map,
Enumerate, Skip, Take, Zip, Cycle (all of the requiring that the adapted
iterator also implements RAI).
std: Tests for RandomAccessIterators
std: Remove RandomAccessIterator impl for VecMutIterator

The RandomAccessIterator implementation is not sound for the mutable vec
iterator, and makes it easy to duplicate &mut element pointers.
extra: Implement DoubleEnded and RandomAccess iterators for bitv
extra: Implement RandomAccessIterator for RingBuf
extra: Implement iterator::Extendable
std: Implement Extendable for hashmap, str and trie
extra: Add .rev_iter() for bitv
std: Remove macro in vec that's only used once
auto merge of #8120 : blake2-ppc/rust/iterator-fixes, r=thestinger

Implement RandomAccessIterator (RAI) where possible, for Iterator adaptors such as Map, Enumerate, Peek, Skip, Take, Cycle, where the adapted iterator is already RAI, and for collections where it is relevant (ringbuf and bitv).

After discussion with thestinger, remove the RAI impl for VecMutIterator, we cannot soundly provide mutable access with this trait.

Implement Extendable everywhere FromIterator is already implemented.

Fixes issue #8108.