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.
Makes sense. I do an unsafe cast in `purescript-argonaut` because I don't want the overhead of JSON serialization, but that should still be safe since the data is guaranteed to be JSON and therefore extend `Object`.