Optimizations and cleanup for StrMap; add unsafeIndex, size, foldM, foldMap

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 improve StrMap tests