Clean up Custom Element script binding when a definition is no longer used.

Previously when a definition was registered, information about its
prototype was stuck on the per-context data for life. By associating
it with a definition it is possible to clean the context up when a
definition is no longer used.

This binding information has to live as long as it might be needed to
create a wrapper for a custom element. That is the longer of: (a) as
long as an element associated with this definition is alive, but does
not have a wrapper; (b) as long as new elements might be created which
are associated with this definition.

Case (a) is handled by the CustomElement::definitions() map, which
maps an element to a held refcount of the definition. Case (b) is
handled by the CustomElementRegistrationContext. The document which is
a factory for new elements owns the registration context, which owns a
CustomElementRegistry, which owns a definition.

Leaks can be induced via the custom element prototype because the
CustomElementBinding has a strong reference to the prototype. This
will be made weak in a follow-up change using a hidden reference from
document to prototype.

BUG=255725
R=haraken@chromium.org

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

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