Moves print

Moves now print to the corner of the canvas. (Luckily there's room. I was afraid I'd have to update some html element. ugh) Will try for smart moves next.
Semismart move counter

t_block.update_move_counter saves the last cursor in a global var. This one then checks if the previous cursor was in the reverse direction. So, it will subtract from the moves when in the cursor was moved from the same spot. However, if this shape is larger than a single block, moving the cursor within the shape will disrupt the current logic. Will try to fix.
Pretty smart move counter

Now tracks the movement of 1x1 & 1x2 shapes. Squares will require more logical analysis. Later, I plan to extract various functions from this so the update_move_counter() isn't so huge.

Maybe updated the html, not sure.)
Smart moves

Square shapes now uncount moves that return to the same spot, independent of the corner that the corner was on to move it last. I haven't found any false positives or missed negatives, so this feature seems complete. MMMMMMerge.

Changed the link to the mit license. Added a test for within_bounds. Started a test of top_corner but noticed that it is a lib function for redraw_affected, but that's part of redraw_affected which is part of render_change, which I don't use anymore. I'll have to decide whether to keep this.

Ooh, I forgot to refactor/extract from the move_counter_update. Perhaps I'll do that now.
:x
Sin. Anyway. extracted the square_checks from move_counter_update, which is enough refactoring for now. mmmmmmmerge time.