Fix Drop trait on generic struct Timer

Recent rust versions forbid Drop on generic traits.
Implement drop in an embedded non-generic struct instead.

Additionally, since the SDL timer runs on a separate thread, use
an AtomicInt for the timer_id to ensure that we only remove a timer
once.