Improvements for StrMap: optimizations, add unsafeIndex, size, foldM, foldMap, Semigroup instance

Since we know that all StrMap objects have prototype Object, we know
they have no additional enumerable keys, so hasOwnProperty checks are
unnecessary.  Add efficient JS implementations for keys and values.  Add
standard Monoid and Monad fold functions, and use them internally.
Minor other changes to eliminate unnecessary function layers and
variables.  Fix and update tests.
Basic STStrMap, allowing efficient mutation of records