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.
Fix Object.equals(NaN, NaN)

Should be true, otherwise heaps can't get rid of NaN.

Thanks @ducarroz.
Merge pull request #44 from kriskowal/equivalence

Relax polymorphism checks in static methods