Fix expiry and unexpiry.

Previously, when a pusher timed out, it'd try and remove it from the
cardThreadMap, but the CardThread would already have been unlinked and
GCed sometimes.  Now we catch the null pointer and print a helpful
message.

Also, because we were not removing the pusher from the pusherMap, when
the card came back we'd never start pushing to it again.  Fixed also.