fix(dropdown): clean up body click listeners upon destroy

Fixes JS exceptions and leaking event listeners as a result of 81235039438.

Clicking on the body calls hide(), which assumes $element is defined and tries to
remove an event handler. Calling destroy ultimately sets $element to null, which
causes subsequent calls to hide() to throw exceptions. Prior to this commit,
destroy() did not clean up event listeners on the body element, so the only way
those click handlers got removed was upon an actual click event which called
harmlessly through hide(). As a result of setting $element to null, however,
it could no longer harmlessly call through hide().

This resulted in both a lot of extra event listeners being registered on the
body element and never cleaned up, and also a lot of exceptions being thrown
any time a dropdown was removed by means of destroying its scope.