Kernel#eval: coerce parameter to string before doing anything else.

Previous behaviour was to delay it after storing/loading the object and its context in a cache.
This could result in an implementation leak when passing an object whose #hash method always returns nil (i.e. a NullObject).