initial commit canvas
materializing/movement uses game notation

both functions take 'A6' notation format
refactored code

single function now operates for all materialized pieces instead of
being draw_dwarf, etc.
materializing/movement refactored

coordinates_to_notation function added
added remove_piece, make_capture
added drag/drop for pieces
added start_classic function
start_classic refactored to setup_game

game started with:

setup_game(CLASSIC_POSITIONS)
piece returns to original pickup location

while being dragged, reduced opacity

the dragend event will eventually have communication with the backend to
validate and then move_piece
added tweening to capture

active pieces always moved to top
full rewrite of code for cleanup
converted webserver to express/socketio
Merge remote-tracking branch 'origin/master' into socketio
gameboard setup on load
successful verification/exchange of moves

very unclean
added ply_breakout

helper function to turn notation into an object ready to be consumed by
the front-end
functional play

only for dwarf.  currently waits for dwarf move, then troll moves.

fixme: cannot move piece into previously occupied square
fixed bug: piece couldnt occupy vacated square

after leaving a square, the square was not emptied out, so further
pieces could not occupy it.  clearing out the square after successful
move fixes this
fixed issue: dwarf unable to capture troll

self-reporting dwarf captures to backend.  trolls do not self report
captures because this game will operate on the assumption of compulsory
capturing.  without explicitly listing troll caps, the backend will auto
capture it in the notation.

this is only relevant because trolls always land in empty spaces but
dwarves land in occupied spaces for capping.
cleaned up server.js