Someone in #clojure was asking about how to case-insensitively check the keys of a map. The best answer anyone present at the time came up with was pre-processing the map by naming, lowering, and keywordifying the keywords. We then found out the asker was looking for keys in nested maps, so I wrote a function for that.
After writing the function I realized I could extract the lowering function and let it take a function to apply to all keys of m and all keys in m's vals.
Here is the map-keys function with the lower-key function extracted. I run it on some goofy data at the end. Try it in a REPL.