Ensure a wrapper is created for underlying data when a MessageEvent comes into V8 world

If a MessageEvent is created by C++ code, data to be returned via the
data attribute may be stored without a V8 wrapper object until the data
attribute is accessed. In such a case, V8 never knows a big data is
stored behind the MessageEvent.

This change ensures a wrapper for the underlying String or ArrayBuffer
created when a wrapper is created for a MessageEvent and set the wrapper
for the underlying data to the wrapper for the MessageEvent as a hidden
value so that V8 knows the memory pressure.

We don't handle this inside WebCore::MessageEvent since ArrayBuffer
passed to the MessageEvent may get wrapped somewhere else and it's hard
to keep everything consistent.

Note: For ArrayBuffer, this works perfectly. But if lots of Strings
with the same contents are created, the created wrapper cannot tell the
exact amount of memory pressure. It's probably because of caching but
unclear for now.

BUG=339480

Review URL: https://codereview.chromium.org/156583002

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