action and state transition logic for discarding

a few things to be careful of -- in particular, you have to keep an 'already discarded this turn' list around because knowing a player has more than 7 cards is not sufficient to say that they should discard. you could have a player with more than 14 resources who already discarded earlier in the turn.

also, some messiness introduced by the fact that we have to pass a player who isn't the current one into the arguments in `perform_action`
basic ui for discarding