Type check when upcasting PassOwnPtr/PassOwnArrayPtr to avoid possible function call ambiguousness

This change is basically extends RefPtr EnsurePtrConvertibleArg pattern to OwnPtr and OwnArrayPtr smart pointers.

Please look at the following example:

class BaseClass {};
class DerivedClass: public BaseClass {};

void foo(PassOwnPtr<BaseClass>) {}
void foo(PassOwnPtr<int /* or whatever type*/>) {}

void fooClientFunction()
{
    OwnPtr<DerivedClass> ptr = adoptPtr(new DerivedClass);
    foo(ptr.release());
}

before this change such snippet would have lead to "error: call of overloaded 'foo(WTF::PassOwnPtr<DerivedClass>)' is ambiguous". 
This CL solves the problem.

Review URL: https://chromiumcodereview.appspot.com/23531003

git-svn-id: svn://svn.chromium.org/blink/trunk@157449 bbb929c8-8fbe-4397-9dbb-9b2b20218538