Implement CardList.filterByType() and CardList.filterByRace()
Move Zone management to the Card.zone property, using moveToZone()

We have to keep that "zone cache" around for sanity, but now we are sure it
will always be kept up to date and we don't have to take care of it during
discards, kills, etc.

This incidentally lets us remove the Card.destroy() override in the Secret
and Minion classes.
Implement Voidcaller, with tests