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
Fix removal during dispatch

This fixes the case where a change listener is removed during dispatch.
All listeners that existed at the beginning of change dispatch except
those that have been since removed are notified, but any listeners added
after the dispatch began are ignored.

Alternative to #46
Merge pull request #48 from kriskowal/fix-removal-during-dispatch

Fix removal during dispatch
Improve remove change listener errors
Update future work and goals
Merge master and observe branches