Relax polymorphism checks in static methods

These changes should improve the performance of polymorphic checks and
equality comparison in general. A method is no longer required to be on
the prototype, which was an unrealistic expectation of JavaScript in the
wild, but retains the ability to deeply compare object literals. The
code for comparing object literals will be exercised less frequently due
to additional checks to bail out early.

I could not bear to completely remove support for comparing object literals because `equals` should be useful down the line for a unit testing or assertion library and deep comparison of object literals is an expected behavior of `equals` as opposed to `be` or `is`.