Guards for BasicObject when coercing types

This PR adds a set of guards for BasicObject when using method such as `Kernel.Float` and `Kernel.Hash`. MRI has special handling for BasicObject. Rubinius didn't and would raise NoMethodError erorrs instead. This PR also includes an extra guard for the second argument of `Kernel.Rational`.

I'm not merging this straight in as I'd like to have some feedback on this matter first. The guards have to be added there in the end but I'm curious if there's perhaps a better way of doing things (or just a more preferred way).
it doesn't respond to that many methods, but to say "if any methods at all" is probably an exaggeration. i count 12 instance methods and a single class method(::new).  the documentation on the left hand side of this webpage http://www.ruby-doc.org/core-2.1.2/BasicObject.html has a list of methods. indeed its very few but to say any methods at all is probably a little misleading.