Replace string eval with define_method

In the majority of instances, using define_method over eval'ing a String
is better, and safer. See:

http://tenderlovemaking.com/2013/03/03/dynamic_method_definitions.html
Remove string eval and replace with class_exec.

These two methods are particularly tricky in their use of string
interpolation for the `class_eval`. To remove the string passed to
`class_eval` one of two approaches is possible:

  * Retain the `class_eval` and exploit the block closure by defining
    local variables referencing the instance variables to be used in the
    eval block
  * Switch to using `class_exec` which was introduced in 1.8.7 and 1.9.
    This allows for instance variables to be passed into the block
    creating block local variables

I choose the latter for writing cleaner code and to embrace the future
dropping of support for 1.8.6.
Flatten class_eval into define_methods messages.

Remove the instances where `class_eval` is there only to change the
value of `self` for the `define_method` message. Just send it directly
to the desired object. Use `__send__` as `define_method` is private.

Remove the superfluous instances of `to_syms`.
Remove extra to_sym.
Merge pull request #340 from cupakromer/replace-string-eval

Replace string eval