Use wrapper structs for iterators in `BTreeMap` and `HashMap`

This pull request converts the `Keys` and `Values` iterators of `BTreeMap` and `HashMap` from using type aliases to using wrapper structs as this is a safer solution long-term.
Might as well flatten these?