Allocation optimization

This is my first stab at #1167.

I found some low-hanging fruit we can optimize.  One change cuts string allocations when defining examples by ~70%.  Another cuts string allocations when running examples by ~50%.

Note that some of the improvements here will only be noticeable on 2.1+; I used the new `.freeze` thing on string literals to get certain static strings to be re-usable.  We can consider extracting constants for them, which will benefit other versions, but I don't really want to go down that path as a general approach (although we may in some cases).  I think it's OK for some optimizations to just help 2.1+ since that's the future of ruby.