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.
If you update to latest QuickCheck, there's no need to have test tuples anymore since Tuple, String, etc., already have Arbitrary instances.