Cleanup

@localshred bit of cleanup in preparation for more "real" fixes. In particular, this makes sure the spec protos are always compiled, which is kinda important.
I disagree with these changes from `class_eval` to `define_method`. Go read [tenderlove's take](http://tenderlovemaking.com/2013/03/03/dynamic_method_definitions.html) on dynamic method definitions and their performance. Be sure to read the caution at the end about closures causing memory leaks.