Make silence wipe all event listeners

This ensures silences removes card innate abilities. We do it by
re-registering the card's own event listeners (since it still needs
some of them, but it still wipes out the extra from card defs).
On Silence, destroy buffs instead of resetting them
Allow overriding OneTurnEffect in card definitions
Implement Shadow Madness with several tests

Shadow Madness is immediately removed on silence. That's easy
enough, just have it give back the minion on death, right?
In doing this, I discovered there is no way for a buff to know
about its own destroy. A BUFF_DESTROY event would be broadcast as
SELF_BUFF_DESTROY to the minion in addition to the buffs, so it
would be useless without hacky argument checking.
Instead, we allow for a destroy() function acting as a hook that
is not based on the event system. It's slightly hacky as well, but
actually falls in line with the design of apply().

Open question: What happens on bounce() then? The buff supposedly
gets destroyed in that event as well. Maybe this should check for
Zone.PLAY? Will have to test.