Remove most is* functions and make `is` smarter

I changed `is` such that it takes a second parameter which can
be a string (i.e. the result of calling `type(x)`) or an
object, which may be either a constructor function or a
prototype. We check for constructors first and prototypes
second, because I reckon the constructor is more specific than
a prototype way down the chain.

I'd like to get rid of `isTh` as well, but I'm not sure how to
do that without getting really hacky or introducing some sort
of traits on functions returned from higher order functions.