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.
Admittedly, it's sort of a band-aid to switch from one type alias to another here, but I figured it's better to go with the path of least change in this pull request to keep it focused.  However, I am working on another separate pull request based on top of this one to clean up `HashSet` a little (including but not limited to doing the type alias conversions), so a proper solution for this is coming.