Hopefully fix #1.

This adds a locking matrix that locks tiles in place after they
move.
Factor out move-and-replace-tile.
Refactor keymapping, add wasd and hjkl bindings.

The keymap is now constructed as an array at runtime, trading
space efficiency for cleaner code and probably time efficiency.
Broaden gitignore.
Split grid services into a new unit.

Thus begins the fun of splitting tp2048 into logical units!
Tidy up key reading.
Split out keymap unit.
Even more splitting of units.
Factor out tile addition.
Split out graphics.
Split off messages unit.
Remove redundant graphics cleanups.
Use window for status line; hide cursor.
Prepare 1.0.0 release.