JS - Perform a drop

We need the state of the model's matches when we first perform the drop,
so we first modify the view according to this state.

First, we go through the view and mark any pieces that need to be
destroyed by adding the appropriate class, as we may want to indicate
such a thing visually at some point.

We then go through the board, from the bottom up, and find the next
piece that can actually fill the space we're about to vacate.  We then
swap the pieces to be destroyed up through the board until they reach
the top row.

We then do the same thing in the model, and upon a "destroyed" piece
reaching the top row, we replace it with a new piece, and tell the board
to assign the appropriate image to the new piece.

Finally, we reset the game pieces to their initial styles and unset the
pieces we swapped to get our finalized game board view.  I discovered a
rather unexpected (but logical) feature of event attachments during this
part, and reattached the event to the board itself instead of to the
images.