* Move require statements in lib files into virtus.rb in the root lib directory
* Change string class_eval for declaring the methods to a normal define_method. Even though this boosts some of the metrics thresholds, I felt it was necessary to avoid "hiding" the complexity inside a string and evaling it. * Move #eql? and #== into a plain module, and just define a #cmp? method that they can both share. We use a similar approach in DM. * Change constructor so that it dupes and freezes the String and Array passed in to avoid mutating the objects in the caller's scope. * Change #<< to return self on it's own rather than relying on a private method just happening to return self, even though taken in isolation the method has no reason to do this. * Remove recompilation from every assigment to @keys.