always obscure matched cards

If a matched cards is guessed and shown, is is not obscured on the
next guess.  Introduce a set to track matched cards and obscure them
(with <Space>) upon the next guess.
clear alert message on good input

An alert message can hang around for a long time, possibly confusing
the user.  Clear the alert message when the user inputs a valid
card.
prevent selection of cards not on the table

The user can select cards not on the table - either coordinates that
are out of bounds, or cards that have already been matched.  Do not
accept such cards and require the user to try again.
keep end game state until user presses <Enter>

So that curses doesn't clear the screen straight away before the
user has a chance to examine the outcome of the game, require the
user to press <Enter> before returning from ``notify_outcome``.
automatically end the game when two cards remain

The requirement for a human player to type "end" when two cards
remain to end the game is easy for the player to overlook.  If the
player plays beyond this situation, the game cannot end.

Therefore, automatically end the game when only two cards remain
(they are necessarily matching cards).  The user can still end the
game early by typing "end".

Also add an alert message at the very beginning of the game to
inform the user as to how to (prematurely) end the game.