Migrating tests to tape and more

Main hunk of this PR is to migrate the unit tests to `tape` since `expresso` is now long deprecated.

Second change in this commit is a logic fix for the failing tests introduced:

* If the item being compared is `__proto__`, chose `keys.object`.
* If the item being compared is of an unknown (to us) type, chose `keys.object`.

It breaks with Haskell's Data.List, but what are your thoughts on returning an empty array on null or undefined inputs?

Additionally, when you merge this PR, mind releasing as `1.0.0`? :smile: