create dummy panel to test draggable API
first pass demonstrating all drag events
allow clients to subscribe to drag/drop events

Implements a basic event manager for each of the seven drag/drop events.
Clients can subscribe to each and react as appropriate.
extract class name manipulation to Util.DOM

- test if element has a class
- apply a class
- remove a class
create shorthand executeForOneOrMany() function

Automates the task of allowing a function to operate on a single element
or array of elements.
test if element has any classes before removal
add drag&drop classnames to watched elements
only trigger events if dragging our objects

We shouldn't trigger drop events if random selections, links, or other
draggable items are being dragged by the user. The UI should only
respond to our objects.
only define the hover CSS once
use Util.DOM functions for applying classes

Span Highlighter wasn't updated along with Anchor Highlighter during
68b926e
expose decorationCallbacks to clients

By allowing clients of Span/Anchor Highlighter to add event listeners,
we can continue to separate concerns. The S/A Highlighters are focused
on marking up the page. Submissions.Interface can determine what
additional steps needs to happen (ex: when does submission happen, do we
attach drag listeners, etc.).
support removing classnames from provided list

If a list of elements is provided to removeHoverCss(), use that list
instead of searching for the elements to update. This allows us to run
the DOM search once during removeAddedAttributesOnHighlightElements(),
and then apply multiple changes to that list of elements.
let clients subscribe events on element removal

When highlighted elements are about to be removed from the DOM, allow
clients (who also subscribed events on element creation) to undo changes
that are necessary.
remove drag handlers on element removal

Specifically, this removes the betterlink-draggable classname from
elements. This needs to be removed so that our highlighter API knows it
can remove the entire element, instead of preserving it because the
element is being used by some other service.
add new modules to local Chrome Extension
show/hide drawer on drag
highlight dropzone when something is dragged over
allow clients to supply a 'this' context

If a client wants to subscribe an object's prototype function as a
listener for an event, we need to allow them to pass the object in as
the 'this' context.
extract & generalize the build of 'dropzones'

Dropzones will serve as DOM elements that take some action on behalf of
the user after they drop content onto them. For example: sharing to
Facebook after the submission link is dropped.
clients can subscribe globally or to elements

When subscribing to drag/drop events, clients should be able to be
alerted in two situations:
- for any event on a Betterlink object
- for events on specific elements they are watching

Dropzone highlight events are triggered on specific elements, while the
Drawer show/hide is triggered for any Betterlink draggable element.