Fixed bug and added feature in AsyncTimer

The bug in AsyncTimer was that it was not retaining the action pointer after scheduling the "periodic" events. And the destructor was failing to cancel this action as a result of that.

This patch also provides a "one-off" timer feature.