Revert "Removed unnecessary try/catch from isInstanceOf"

This reverts commit 58ee52ad4a0ebf51f9add9b99188968268ed6f8e.

As it turns out, IE9 allows use of instanceof with special object types, not
just functions. One such example is HTMLElement; its type is `object', whereas
in Firefox and Chromium it is `function'. There is no reliable way to perform
this detection.

Therefore, the try/catch here is more reliable.
Added isCompatible method to interfaces

There is a great amount of rationale in the test case added in this commit.
ClassBuilder.isInstanceOf now defers to type

This allows separation of concerns and makes the type system extensible. If
the type does not implement the necessary API, it falls back to using
instanceof.