Initial implementation of "str".freeze optimization in compiler.

This version only caches strings at the call site, rather than in
a runtime-global table. The runtime-global table would require an
additional weak map so all call sites using the same string would
return the same object. It's probably a good enhancement, but the
bulk of this optimization is gained by having individual sites
return the same object each time.

See http://bugs.ruby-lang.org/issues/8992