Large commit - continuation-based system works.

For the most part, the continuation-based game loop
is functional. Things tested: playing cards, paying mana costs,
casting instants and sorceries, targeting cards and players.
Things seem to be working well, except for OnAttack triggers
Master of Diversions works - OnAttack triggers in general work
Started setting up a multithreaded model.

This already seems like a better fit than bouncing control
around within a single thread. Instead of pausing an action, storing
the action into some variable in the state, returning a continuation,
and then picking up where we left off, now it should just be: request
input, wait for input, act on input.

The main downside I see here is that the game logic will have to run
in the IO monad. This sacrifices purity for thread<->thread communication,
but I think I am OK with that at this point.
SnapServer should be set up for multithreading.

Nothing is implemented in the game logic side of things,
but the UI side should be functional. If you try to do anything,
the UI waits for the game logic (which never happens), but that is
expected.
Except for targeting, everything seems to match
previous functionality.
Targeting works.

Currently, there is a bug that a creature that "must be blocked"
causes things to break if the blocking player tries to pass turn
without blocking the creature. I'd fix this, but homework.
Abilities work!

No support for them in the client yet, but that's ok. That is
(relatively) easy to add. The important thing is that both
Soulmender and Prodigal Pyromancer have successfully used abilities
in-game.
Now handles incorrect ability use API calls without breaking