Update initializer to use class_eval and class_eval

* Some of the metrics thresholds needed to be adjusted upwards, but
  I believe this is because the original complexity was hidden
  behind a string class eval. Granted some of the things like arity
  checking needed to be done manually and not provided by ruby.

  I wonder if a better implementation might be to build the code
  using an AST, and then using unparser to generate the ruby code.
  Then we get the benefits of not hiding the method creation behind
  string concatenation, but we also get the things that ruby
  provides for free like arity checking.