JS/CSS - Perform a match

When we're in the matching state, we check our model for a match.

If there's not a match, we put things back the way we found them since
nothing can happen; this is why we save the initial piece references.

If there's a match, we go ahead and perform the swap visually and mark
the pieces that match as being a match, since we'll need to perform some
operations on these pieces.

We set the next state (dropping) to prevent performing the match
operation again due to errant clicks, and I gray out the pieces in order
to debug the dropping operations.  In the production version of the
game, this will be switched to an opacity fade to make it look like the
pieces are "gone".