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.
I think we can do a foldable instance since the order is stable in all known implementations of Javascript.