Additions, improvements, and optimizations for StrMap

It's unfortunate that the foldM implementation can't properly short-circuit, but otherwise is general enough to support a number of other operations.  I've added more efficient JS implementations for select functions, and simplified/generalized some already there.

In a separate commit I've added a basic Data.StrMap.ST mutable interface to JS records.  This part probably still needs test cases, so could be left off for now.

All changes should be fully backwards-compatible.
Actually, some of them, yeah, that's a great idea.  Do you have any suggestions for avoiding the module dependency cycle?  Put them all in one big module or make an Internal module and re-export?