Cross-instance disposers and disposable promises

This patch makes disposers and disposable promises work across bluebird
instances. The instanceof Disposer check was replaced with a duck
typing check and a new local cast function that preserves the
disposable property and the disposer was added.